Patchwork [2/2] net: Dump client type 'info network'

login
register
mail settings
Submitter Jan Kiszka
Date May 17, 2011, 5:05 p.m.
Message ID <4DD2AAE5.1020408@siemens.com>
Download mbox | patch
Permalink /patch/95999/
State New
Headers show

Comments

Jan Kiszka - May 17, 2011, 5:05 p.m.
Include the client type name into the output of 'info network'. The
result looks like this:

(qemu) info network
VLAN 0 devices:
  rtl8139.0 (NIC): model=rtl8139,macaddr=52:54:00:12:34:57
Devices not on any VLAN:
  virtio-net-pci.0 (NIC): model=virtio-net-pci,macaddr=52:54:00:12:34:56
   \ network1 (tap): fd=5

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 net.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)
Stefan Hajnoczi - May 18, 2011, 7:35 a.m.
On Tue, May 17, 2011 at 6:05 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> Include the client type name into the output of 'info network'. The
> result looks like this:
>
> (qemu) info network
> VLAN 0 devices:
>  rtl8139.0 (NIC): model=rtl8139,macaddr=52:54:00:12:34:57
> Devices not on any VLAN:
>  virtio-net-pci.0 (NIC): model=virtio-net-pci,macaddr=52:54:00:12:34:56
>   \ network1 (tap): fd=5
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  net.c |   18 +++++++++++++++---
>  1 files changed, 15 insertions(+), 3 deletions(-)

This is useful.

Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Markus Armbruster - May 18, 2011, 8:09 a.m.
Jan Kiszka <jan.kiszka@siemens.com> writes:

> Include the client type name into the output of 'info network'. The
> result looks like this:
>
> (qemu) info network
> VLAN 0 devices:
>   rtl8139.0 (NIC): model=rtl8139,macaddr=52:54:00:12:34:57
> Devices not on any VLAN:
>   virtio-net-pci.0 (NIC): model=virtio-net-pci,macaddr=52:54:00:12:34:56
>    \ network1 (tap): fd=5

I guess I'd prefix vc->infostr with type=WHATEVER, for consistency with
the command line, like this:

  (qemu) info network
  VLAN 0 devices:
    rtl8139.0: type=nic,model=rtl8139,macaddr=52:54:00:12:34:57
  Devices not on any VLAN:
    virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
     \ network1: type=tap,fd=5

>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  net.c |   18 +++++++++++++++---
>  1 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/net.c b/net.c
> index 606ce70..a4ee6b1 100644
> --- a/net.c
> +++ b/net.c
> @@ -1223,6 +1223,15 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>  
>  void do_info_network(Monitor *mon)
>  {
> +    static const char *typename[] = {
> +        [NET_CLIENT_TYPE_NONE]   = "none",
> +        [NET_CLIENT_TYPE_NIC]    = "NIC",
> +        [NET_CLIENT_TYPE_SLIRP]  = "user IPv4",
> +        [NET_CLIENT_TYPE_TAP]    = "tap",
> +        [NET_CLIENT_TYPE_SOCKET] = "socket",
> +        [NET_CLIENT_TYPE_VDE]    = "VDE",
> +        [NET_CLIENT_TYPE_DUMP]   = "dump",
> +    };

Why not use the type names from net_client_types[]?  Easier, and
consistent with the command line.

>      VLANState *vlan;
>      VLANClientState *vc, *peer;
>      net_client_type type;
> @@ -1231,7 +1240,8 @@ void do_info_network(Monitor *mon)
>          monitor_printf(mon, "VLAN %d devices:\n", vlan->id);
>  
>          QTAILQ_FOREACH(vc, &vlan->clients, next) {
> -            monitor_printf(mon, "  %s: %s\n", vc->name, vc->info_str);
> +            monitor_printf(mon, "  %s (%s): %s\n", vc->name,
> +                           typename[vc->info->type], vc->info_str);
>          }
>      }
>      monitor_printf(mon, "Devices not on any VLAN:\n");
> @@ -1239,10 +1249,12 @@ void do_info_network(Monitor *mon)
>          peer = vc->peer;
>          type = vc->info->type;
>          if (!peer || type == NET_CLIENT_TYPE_NIC) {
> -            monitor_printf(mon, "  %s: %s\n", vc->name, vc->info_str);
> +            monitor_printf(mon, "  %s (%s): %s\n", vc->name, typename[type],
> +                           vc->info_str);
>          }
>          if (peer && type == NET_CLIENT_TYPE_NIC) {
> -            monitor_printf(mon, "   \\ %s: %s\n", peer->name, peer->info_str);
> +            monitor_printf(mon, "   \\ %s (%s): %s\n", peer->name,
> +                           typename[peer->info->type], peer->info_str);
>          }
>      }
>  }
Jan Kiszka - May 20, 2011, 4:02 p.m.
On 2011-05-18 10:09, Markus Armbruster wrote:
> Jan Kiszka <jan.kiszka@siemens.com> writes:
> 
>> Include the client type name into the output of 'info network'. The
>> result looks like this:
>>
>> (qemu) info network
>> VLAN 0 devices:
>>   rtl8139.0 (NIC): model=rtl8139,macaddr=52:54:00:12:34:57
>> Devices not on any VLAN:
>>   virtio-net-pci.0 (NIC): model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>    \ network1 (tap): fd=5
> 
> I guess I'd prefix vc->infostr with type=WHATEVER, for consistency with
> the command line, like this:
> 
>   (qemu) info network
>   VLAN 0 devices:
>     rtl8139.0: type=nic,model=rtl8139,macaddr=52:54:00:12:34:57
>   Devices not on any VLAN:
>     virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>      \ network1: type=tap,fd=5

That really only creates consistency for the 'user' client. Other
clients put arbitrarily formatted strings into info_str. If it's still
preferred that way, no big deal, just wanted to point it out.

> 
>>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>> ---
>>  net.c |   18 +++++++++++++++---
>>  1 files changed, 15 insertions(+), 3 deletions(-)
>>
>> diff --git a/net.c b/net.c
>> index 606ce70..a4ee6b1 100644
>> --- a/net.c
>> +++ b/net.c
>> @@ -1223,6 +1223,15 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>  
>>  void do_info_network(Monitor *mon)
>>  {
>> +    static const char *typename[] = {
>> +        [NET_CLIENT_TYPE_NONE]   = "none",
>> +        [NET_CLIENT_TYPE_NIC]    = "NIC",
>> +        [NET_CLIENT_TYPE_SLIRP]  = "user IPv4",
>> +        [NET_CLIENT_TYPE_TAP]    = "tap",
>> +        [NET_CLIENT_TYPE_SOCKET] = "socket",
>> +        [NET_CLIENT_TYPE_VDE]    = "VDE",
>> +        [NET_CLIENT_TYPE_DUMP]   = "dump",
>> +    };
> 
> Why not use the type names from net_client_types[]?  Easier, and
> consistent with the command line.

Will do.

Thanks,
Jan
Jan Kiszka - May 20, 2011, 4:12 p.m.
On 2011-05-20 18:02, Jan Kiszka wrote:
> On 2011-05-18 10:09, Markus Armbruster wrote:
>> Jan Kiszka <jan.kiszka@siemens.com> writes:
>>
>>> Include the client type name into the output of 'info network'. The
>>> result looks like this:
>>>
>>> (qemu) info network
>>> VLAN 0 devices:
>>>   rtl8139.0 (NIC): model=rtl8139,macaddr=52:54:00:12:34:57
>>> Devices not on any VLAN:
>>>   virtio-net-pci.0 (NIC): model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>>    \ network1 (tap): fd=5
>>
>> I guess I'd prefix vc->infostr with type=WHATEVER, for consistency with
>> the command line, like this:
>>
>>   (qemu) info network
>>   VLAN 0 devices:
>>     rtl8139.0: type=nic,model=rtl8139,macaddr=52:54:00:12:34:57
>>   Devices not on any VLAN:
>>     virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>      \ network1: type=tap,fd=5
> 
> That really only creates consistency for the 'user' client. Other
> clients put arbitrarily formatted strings into info_str. If it's still
> preferred that way, no big deal, just wanted to point it out.

Umm, obviously nic and tap are formatting similar, just dump and
(broken-again-by-someone) socket do not. So let's go for type=.

Jan

Patch

diff --git a/net.c b/net.c
index 606ce70..a4ee6b1 100644
--- a/net.c
+++ b/net.c
@@ -1223,6 +1223,15 @@  int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
 
 void do_info_network(Monitor *mon)
 {
+    static const char *typename[] = {
+        [NET_CLIENT_TYPE_NONE]   = "none",
+        [NET_CLIENT_TYPE_NIC]    = "NIC",
+        [NET_CLIENT_TYPE_SLIRP]  = "user IPv4",
+        [NET_CLIENT_TYPE_TAP]    = "tap",
+        [NET_CLIENT_TYPE_SOCKET] = "socket",
+        [NET_CLIENT_TYPE_VDE]    = "VDE",
+        [NET_CLIENT_TYPE_DUMP]   = "dump",
+    };
     VLANState *vlan;
     VLANClientState *vc, *peer;
     net_client_type type;
@@ -1231,7 +1240,8 @@  void do_info_network(Monitor *mon)
         monitor_printf(mon, "VLAN %d devices:\n", vlan->id);
 
         QTAILQ_FOREACH(vc, &vlan->clients, next) {
-            monitor_printf(mon, "  %s: %s\n", vc->name, vc->info_str);
+            monitor_printf(mon, "  %s (%s): %s\n", vc->name,
+                           typename[vc->info->type], vc->info_str);
         }
     }
     monitor_printf(mon, "Devices not on any VLAN:\n");
@@ -1239,10 +1249,12 @@  void do_info_network(Monitor *mon)
         peer = vc->peer;
         type = vc->info->type;
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "  %s: %s\n", vc->name, vc->info_str);
+            monitor_printf(mon, "  %s (%s): %s\n", vc->name, typename[type],
+                           vc->info_str);
         }
         if (peer && type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "   \\ %s: %s\n", peer->name, peer->info_str);
+            monitor_printf(mon, "   \\ %s (%s): %s\n", peer->name,
+                           typename[peer->info->type], peer->info_str);
         }
     }
 }