net: Dump client type 'info network'
PATCH 2/2 net: Dump client type 'info network'
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
--- net.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)
net.c +15 -3
@@ -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); } } }
Signature · 1 line
1.7.1
Quoted 10 lines · Jan Kiszka
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
Quoted 4 lines
Signed-off-by Jan Kiszka <[email protected]>---
net.c | 18 +++++++++++++++---1 files changed, 15 insertions(+), 3 deletions(-)
This is useful.
Quoted 9 lines · Jan Kiszka
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=5Quoted 13 lines
Signed-off-by Jan Kiszka <[email protected]>--- net.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)net.c +0
-0@@ -1223,6 +1223,15 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)void do_info_network (Monitor *mon)
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1234
Quoted 10 lines
net.c +9
-0{ +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.
Quoted 28 lines
net.c +6
-3VLANState *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); } } }
Quoted 15 lines · Markus Armbruster
Quoted 9 lines · Jan Kiszka
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=5I guess I'd prefix
vc->infostrwith type=WHATEVER, for consistency with the command line, like this:
Quoted 6 lines
(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.
Quoted 13 lines
Quoted 13 lines
Signed-off-by Jan Kiszka <[email protected]>--- net.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)net.c +0
-0@@ -1223,6 +1223,15 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
Quoted 14 lines
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1234
Quoted 11 lines
net.c +9
-0void 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
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux
Quoted 23 lines · Jan Kiszka
Quoted 15 lines · Markus Armbruster
Quoted 9 lines · Jan Kiszka
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=5I guess I'd prefix
vc->infostrwith type=WHATEVER, for consistency with the command line, like this:Quoted 6 lines
(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
Quoted 3 lines
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
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux
PATCH v2 2/2 net: Dump client type 'info network'
Include the client type name into the output of 'info network'. The result looks 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
---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor out print_net_client
net.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)
net.c +22 -3
@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" , + [NET_CLIENT_TYPE_SLIRP ] ="user" , + [NET_CLIENT_TYPE_TAP ] ="tap" , + [NET_CLIENT_TYPE_SOCKET ] ="socket" , + [NET_CLIENT_TYPE_VDE ] ="vde" , + [NET_CLIENT_TYPE_DUMP ] ="dump" , + }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +} +void do_info_network (Monitor *mon) {VLANState *vlan;
@@ -1231,7 +1247,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," " ); +print_net_client (mon, vc); } }monitor_printf (mon,"Devices not on any VLAN:\n" );
@@ -1239,10 +1256,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," " ); +print_net_client (mon, vc); }if (peer && type ==NET_CLIENT_TYPE_NIC ) { -monitor_printf (mon," \\ %s: %s\n" , peer->name, peer->info_str); +monitor_printf (mon," \\ " ); +print_net_client (mon, peer); } } }
Signature · 1 line
1.7.1
Quoted 34 lines · Jan Kiszka
Include the client type name into the output of 'info network'. The result looks 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=5Signed-off-by Jan Kiszka <[email protected]>---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor outprint_net_clientnet.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)net.c +5
-0@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" ,
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1238
Quoted 10 lines
net.c +10
-0+ [NET_CLIENT_TYPE_SLIRP] = "user", + [NET_CLIENT_TYPE_TAP] = "tap", + [NET_CLIENT_TYPE_SOCKET] = "socket", + [NET_CLIENT_TYPE_VDE] = "vde", + [NET_CLIENT_TYPE_DUMP ] ="dump" , + }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +}
Any particular reason for using typename[vc->info->type] instead of net_client[types[vc->info->type].type?
[...]
Quoted 41 lines · Markus Armbruster
Quoted 39 lines · Jan Kiszka
Include the client type name into the output of 'info network'. The result looks 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=5Signed-off-by Jan Kiszka <[email protected]>---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor outprint_net_clientnet.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)net.c +10
-0@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" , + [NET_CLIENT_TYPE_SLIRP ] ="user" , + [NET_CLIENT_TYPE_TAP ] ="tap" , + [NET_CLIENT_TYPE_SOCKET ] ="socket" , + [NET_CLIENT_TYPE_VDE ] ="vde" , + [NET_CLIENT_TYPE_DUMP ] ="dump" ,
Quoted 8 lines
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1238
Quoted 5 lines
net.c +5
-0+ }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +}Any particular reason for using typename[vc->info->type] instead of net_client[types[vc->info->type].type?
Uncertainty about the sorting of that array. Is it supposed to be aligned to NET_CLIENT_TYPE_* definitions?
Jan
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux
Quoted 51 lines · Jan Kiszka
Quoted 41 lines · Markus Armbruster
Quoted 39 lines · Jan Kiszka
Include the client type name into the output of 'info network'. The result looks 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=5Signed-off-by Jan Kiszka <[email protected]>---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor outprint_net_clientnet.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)net.c +10
-0@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" , + [NET_CLIENT_TYPE_SLIRP ] ="user" , + [NET_CLIENT_TYPE_TAP ] ="tap" , + [NET_CLIENT_TYPE_SOCKET ] ="socket" , + [NET_CLIENT_TYPE_VDE ] ="vde" , + [NET_CLIENT_TYPE_DUMP ] ="dump" ,Quoted 8 lines
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1238
Quoted 5 lines
net.c +5
-0+ }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +}Any particular reason for using typename[vc->info->type] instead of net_client[types[vc->info->type].type?
Quoted 2 lines
Uncertainty about the sorting of that array. Is it supposed to be aligned to NET_CLIENT_TYPE_* definitions?
Hmm, you're right: it happens to be in order, but it's not explicit, so you can't rely on it. I'd be tempted to make the order explicit, but it's your call.
Quoted 53 lines · Markus Armbruster
Quoted 51 lines · Jan Kiszka
Quoted 49 lines · Markus Armbruster
Quoted 34 lines · Jan Kiszka
Include the client type name into the output of 'info network'. The result looks 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=5Signed-off-by Jan Kiszka <[email protected]>---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor outprint_net_clientnet.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)net.c +5
-0@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" ,net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1238
Quoted 10 lines
net.c +10
-0+ [NET_CLIENT_TYPE_SLIRP] = "user", + [NET_CLIENT_TYPE_TAP] = "tap", + [NET_CLIENT_TYPE_SOCKET] = "socket", + [NET_CLIENT_TYPE_VDE] = "vde", + [NET_CLIENT_TYPE_DUMP ] ="dump" , + }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +}Any particular reason for using typename[vc->info->type] instead of net_client[types[vc->info->type].type?
Quoted 6 lines
Quoted 2 lines
Uncertainty about the sorting of that array. Is it supposed to be aligned to NET_CLIENT_TYPE_* definitions?
Hmm, you're right: it happens to be in order, but it's not explicit, so you can't rely on it. I'd be tempted to make the order explicit, but it's your call.
Checked again: net_client is terminated by a NULL entry. If we put certain entries on fixed slots, that would created premature list termination if some features is missing (e.g. VDE is configured out). So we actually need a separate name array.
Jan
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux
Quoted 57 lines · Jan Kiszka
Quoted 56 lines · Markus Armbruster
Quoted 53 lines · Jan Kiszka
Quoted 41 lines · Markus Armbruster
Quoted 39 lines · Jan Kiszka
Include the client type name into the output of 'info network'. The result looks 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=5Signed-off-by Jan Kiszka <[email protected]>---
Changes in v2:
- format type as "type=name"
- use standard type names
- factor outprint_net_clientnet.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)net.c +10
-0@@ -1221,6 +1221,22 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)return 0 ; } +static void print_net_client (Monitor *mon,VLANClientState *vc) +{ +static const char *typename[] = { + [NET_CLIENT_TYPE_NONE ] ="none" , + [NET_CLIENT_TYPE_NIC ] ="nic" , + [NET_CLIENT_TYPE_SLIRP ] ="user" , + [NET_CLIENT_TYPE_TAP ] ="tap" , + [NET_CLIENT_TYPE_SOCKET ] ="socket" , + [NET_CLIENT_TYPE_VDE ] ="vde" , + [NET_CLIENT_TYPE_DUMP ] ="dump" ,Quoted 8 lines
net.c int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data) · line 1238
Quoted 5 lines
net.c +5
-0+ }; + +monitor_printf (mon,"%s: type=%s,%s\n" , vc->name, + typename[vc->info->type], vc->info_str); +}Any particular reason for using typename[vc->info->type] instead of net_client[types[vc->info->type].type?
Uncertainty about the sorting of that array. Is it supposed to be aligned to NET_CLIENT_TYPE_* definitions?
Quoted 8 lines
Quoted 3 lines
Hmm, you're right: it happens to be in order, but it's not explicit, so you can't rely on it. I'd be tempted to make the order explicit, but it's your call.
Checked again:
net_clientis terminated by a NULL entry. If we put certain entries on fixed slots, that would created premature list termination if some features is missing (e.g. VDE is configured out). So we actually need a separate name array.
Fixable; there's just one user. But again: it's your call.
Quoted 6 lines · Markus Armbruster
Quoted 4 lines
Checked again:
net_clientis terminated by a NULL entry. If we put certain entries on fixed slots, that would created premature list termination if some features is missing (e.g. VDE is configured out). So we actually need a separate name array.Fixable; there's just one user. But again: it's your call.
OK, I give up :). Will resend the whole thing with refactored net_client_types to use them for output as well.
Jan
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux