* [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
@ 2012-05-24 17:59 zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 01/16] net: Add a hub net client zwu.kernel
` (16 more replies)
0 siblings, 17 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
Changelog from v2:
1.) add the support for hub own flow control [paolo]
2.) make the monitor output more reasonable hub info [jan kiszka]
v2:
1.) cleanup some obsolete vlan info
2.) cleanup deliver/deliver_iov func pointers [paolo]
3.) support more flexible flow control [paolo]
Stefan Hajnoczi (12):
net: Add a hub net client
net: Use hubs for the vlan feature
net: Look up 'vlan' net clients using hubs
hub: Check that hubs are configured correctly
net: Drop vlan argument to qemu_new_net_client()
net: Remove vlan qdev property
net: Remove vlan code from net.c
net: Remove VLANState
net: Rename non_vlan_clients to net_clients
net: Rename VLANClientState to NetClientState
net: Rename vc local variables to nc
net: Rename qemu_del_vlan_client() to qemu_del_net_client()
Zhi Yong Wu (4):
net: Make the monitor output more reasonable hub info
net: cleanup deliver/deliver_iov func pointers
net: determine if packets can be sent before net queue deliver
packets
hub: add the support for hub own flow control
Makefile.objs | 2 +-
hw/cadence_gem.c | 8 +-
hw/dp8393x.c | 6 +-
hw/e1000.c | 10 +-
hw/eepro100.c | 8 +-
hw/etraxfs_eth.c | 8 +-
hw/lan9118.c | 8 +-
hw/lance.c | 2 +-
hw/mcf_fec.c | 6 +-
hw/milkymist-minimac2.c | 6 +-
hw/mipsnet.c | 6 +-
hw/musicpal.c | 6 +-
hw/ne2000-isa.c | 2 +-
hw/ne2000.c | 8 +-
hw/ne2000.h | 4 +-
hw/opencores_eth.c | 8 +-
hw/pcnet-pci.c | 4 +-
hw/pcnet.c | 6 +-
hw/pcnet.h | 6 +-
hw/qdev-properties.c | 78 +------
hw/qdev.c | 2 -
hw/qdev.h | 8 +-
hw/rtl8139.c | 10 +-
hw/smc91c111.c | 6 +-
hw/spapr_llan.c | 4 +-
hw/stellaris_enet.c | 6 +-
hw/usb/dev-network.c | 8 +-
hw/vhost_net.c | 24 +-
hw/vhost_net.h | 2 +-
hw/virtio-net.c | 12 +-
hw/xen_nic.c | 7 +-
hw/xgmac.c | 6 +-
hw/xilinx_axienet.c | 6 +-
hw/xilinx_ethlite.c | 6 +-
net.c | 606 ++++++++++++++---------------------------------
net.h | 85 ++++----
net/dump.c | 28 ++-
net/dump.h | 2 +-
net/hub.c | 298 +++++++++++++++++++++++
net/hub.h | 28 +++
net/queue.c | 42 ++--
net/queue.h | 25 +--
net/slirp.c | 32 +--
net/slirp.h | 2 +-
net/socket.c | 66 +++---
net/socket.h | 2 +-
net/tap-win32.c | 27 +-
net/tap.c | 45 ++--
net/tap.h | 21 +-
net/vde.c | 17 +-
net/vde.h | 3 +-
qemu-common.h | 3 +-
slirp/if.c | 5 -
slirp/libslirp.h | 1 -
54 files changed, 811 insertions(+), 826 deletions(-)
create mode 100644 net/hub.c
create mode 100644 net/hub.h
--
1.7.6
^ permalink raw reply [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 01/16] net: Add a hub net client
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 02/16] net: Use hubs for the vlan feature zwu.kernel
` (15 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
The vlan feature can be implemented in terms of hubs. By introducing a
hub net client it becomes possible to remove the special case vlan code
from net.c and push the vlan feature out of generic networking code.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
Makefile.objs | 2 +-
net.h | 1 +
net/hub.c | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
net/hub.h | 23 +++++++
4 files changed, 225 insertions(+), 1 deletions(-)
create mode 100644 net/hub.c
create mode 100644 net/hub.h
diff --git a/Makefile.objs b/Makefile.objs
index 70c5c79..a3a3a8a 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -63,7 +63,7 @@ block-nested-$(CONFIG_RBD) += rbd.o
block-obj-y += $(addprefix block/, $(block-nested-y))
net-obj-y = net.o
-net-nested-y = queue.o checksum.o util.o
+net-nested-y = queue.o checksum.o util.o hub.o
net-nested-y += socket.o
net-nested-y += dump.o
net-nested-$(CONFIG_POSIX) += tap.o
diff --git a/net.h b/net.h
index 64993b4..50c55ad 100644
--- a/net.h
+++ b/net.h
@@ -38,6 +38,7 @@ typedef enum {
NET_CLIENT_TYPE_VDE,
NET_CLIENT_TYPE_DUMP,
NET_CLIENT_TYPE_BRIDGE,
+ NET_CLIENT_TYPE_HUB,
NET_CLIENT_TYPE_MAX
} net_client_type;
diff --git a/net/hub.c b/net/hub.c
new file mode 100644
index 0000000..0d3df7f
--- /dev/null
+++ b/net/hub.c
@@ -0,0 +1,200 @@
+/*
+ * Hub net client
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#include "monitor.h"
+#include "net.h"
+#include "hub.h"
+
+/*
+ * A hub broadcasts incoming packets to all its ports except the source port.
+ * Hubs can be used to provide independent network segments, also confusingly
+ * named the QEMU 'vlan' feature.
+ */
+
+typedef struct NetHub NetHub;
+
+typedef struct NetHubPort {
+ VLANClientState nc;
+ QLIST_ENTRY(NetHubPort) next;
+ NetHub *hub;
+ unsigned int id;
+} NetHubPort;
+
+struct NetHub {
+ unsigned int id;
+ QLIST_ENTRY(NetHub) next;
+ unsigned int num_ports;
+ QLIST_HEAD(, NetHubPort) ports;
+};
+
+static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
+
+static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
+ const uint8_t *buf, size_t len)
+{
+ NetHubPort *port;
+
+ QLIST_FOREACH(port, &hub->ports, next) {
+ if (port == source_port) {
+ continue;
+ }
+
+ qemu_send_packet(&port->nc, buf, len);
+ }
+ return len;
+}
+
+static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
+ const struct iovec *iov, int iovcnt)
+{
+ NetHubPort *port;
+ ssize_t ret = 0;
+
+ QLIST_FOREACH(port, &hub->ports, next) {
+ if (port == source_port) {
+ continue;
+ }
+
+ ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
+ }
+ return ret;
+}
+
+static NetHub *net_hub_new(unsigned int id)
+{
+ NetHub *hub;
+
+ hub = g_malloc(sizeof(*hub));
+ hub->id = id;
+ hub->num_ports = 0;
+ QLIST_INIT(&hub->ports);
+
+ QLIST_INSERT_HEAD(&hubs, hub, next);
+
+ return hub;
+}
+
+static ssize_t net_hub_port_receive(VLANClientState *nc,
+ const uint8_t *buf, size_t len)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+ return net_hub_receive(port->hub, port, buf, len);
+}
+
+static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
+ const struct iovec *iov, int iovcnt)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+ return net_hub_receive_iov(port->hub, port, iov, iovcnt);
+}
+
+static void net_hub_port_cleanup(VLANClientState *nc)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+ QLIST_REMOVE(port, next);
+}
+
+static NetClientInfo net_hub_port_info = {
+ .type = NET_CLIENT_TYPE_HUB,
+ .size = sizeof(NetHubPort),
+ .receive = net_hub_port_receive,
+ .receive_iov = net_hub_port_receive_iov,
+ .cleanup = net_hub_port_cleanup,
+};
+
+static NetHubPort *net_hub_port_new(NetHub *hub)
+{
+ VLANClientState *nc;
+ NetHubPort *port;
+ unsigned int id = hub->num_ports++;
+ char name[128];
+
+ snprintf(name, sizeof name, "hub%uport%u", hub->id, id);
+
+ nc = qemu_new_net_client(&net_hub_port_info, NULL, NULL, "hub", name);
+ port = DO_UPCAST(NetHubPort, nc, nc);
+ port->id = id;
+ port->hub = hub;
+
+ QLIST_INSERT_HEAD(&hub->ports, port, next);
+
+ return port;
+}
+
+/**
+ * Create a port on a given hub
+ *
+ * If there is no existing hub with the given id then a new hub is created.
+ */
+VLANClientState *net_hub_add_port(unsigned int hub_id)
+{
+ NetHub *hub;
+ NetHubPort *port;
+
+ QLIST_FOREACH(hub, &hubs, next) {
+ if (hub->id == hub_id) {
+ break;
+ }
+ }
+
+ if (!hub) {
+ hub = net_hub_new(hub_id);
+ }
+
+ port = net_hub_port_new(hub);
+ return &port->nc;
+}
+
+/**
+ * Print hub configuration
+ */
+void net_hub_info(Monitor *mon)
+{
+ NetHub *hub;
+ NetHubPort *port;
+
+ QLIST_FOREACH(hub, &hubs, next) {
+ monitor_printf(mon, "hub %u\n", hub->id);
+ QLIST_FOREACH(port, &hub->ports, next) {
+ monitor_printf(mon, " port %u peer %s\n", port->id,
+ port->nc.peer ? port->nc.peer->name : "<none>");
+ }
+ }
+}
+
+/**
+ * Get the hub id that a client is connected to
+ *
+ * @id Pointer for hub id output, may be NULL
+ */
+int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
+{
+ NetHub *hub;
+ NetHubPort *port;
+
+ QLIST_FOREACH(hub, &hubs, next) {
+ QLIST_FOREACH(port, &hub->ports, next) {
+ if (&port->nc == nc ||
+ (port->nc.peer && port->nc.peer == nc)) {
+ if (id) {
+ *id = hub->id;
+ }
+ return 0;
+ }
+ }
+ }
+ return -ENOENT;
+}
diff --git a/net/hub.h b/net/hub.h
new file mode 100644
index 0000000..3ca05dc
--- /dev/null
+++ b/net/hub.h
@@ -0,0 +1,23 @@
+/*
+ * Hub net client
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#ifndef NET_HUB_H
+#define NET_HUB_H
+
+#include "qemu-common.h"
+
+VLANClientState *net_hub_add_port(unsigned int hub_id);
+void net_hub_info(Monitor *mon);
+int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+
+#endif /* NET_HUB_H */
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 02/16] net: Use hubs for the vlan feature
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 01/16] net: Add a hub net client zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
` (14 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Stop using the special-case vlan code in net.c. Instead use the hub net
client to implement the vlan feature. The next patch will remove vlan
code from net.c completely.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 46 +++++++++++++++++++++++++---------------------
net/dump.c | 20 ++++++++++++++------
net/dump.h | 2 +-
net/slirp.c | 8 ++++----
net/slirp.h | 2 +-
net/socket.c | 48 ++++++++++++++++++++++++++----------------------
net/socket.h | 2 +-
net/tap-win32.c | 9 +++++----
net/tap.c | 7 ++++---
net/tap.h | 3 ++-
net/vde.c | 9 +++++----
net/vde.h | 3 ++-
12 files changed, 90 insertions(+), 69 deletions(-)
diff --git a/net.c b/net.c
index 1922d8a..8c02559 100644
--- a/net.c
+++ b/net.c
@@ -25,6 +25,7 @@
#include "config-host.h"
+#include "net/hub.h"
#include "net/tap.h"
#include "net/socket.h"
#include "net/dump.h"
@@ -153,23 +154,25 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
macaddr->a[5] = 0x56 + index++;
}
+/**
+ * Generate a name for net client
+ *
+ * Only net clients created with the legacy -net option need this. Naming is
+ * mandatory for net clients created with -netdev.
+ */
static char *assign_name(VLANClientState *vc1, const char *model)
{
- VLANState *vlan;
VLANClientState *vc;
char buf[256];
int id = 0;
- QTAILQ_FOREACH(vlan, &vlans, next) {
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- if (vc != vc1 && strcmp(vc->model, model) == 0) {
- id++;
- }
- }
- }
-
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
- if (vc != vc1 && strcmp(vc->model, model) == 0) {
+ if (vc == vc1) {
+ continue;
+ }
+ /* For compatibility only bump id for net clients on a vlan */
+ if (strcmp(vc->model, model) == 0 &&
+ net_hub_id_for_client(vc, NULL) == 0) {
id++;
}
}
@@ -748,7 +751,7 @@ int net_handle_fd_param(Monitor *mon, const char *param)
static int net_init_nic(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANState *vlan)
+ VLANClientState *peer)
{
int idx;
NICInfo *nd;
@@ -771,8 +774,8 @@ static int net_init_nic(QemuOpts *opts,
return -1;
}
} else {
- assert(vlan);
- nd->vlan = vlan;
+ assert(peer);
+ nd->netdev = peer;
}
if (name) {
nd->name = g_strdup(name);
@@ -820,17 +823,17 @@ static int net_init_nic(QemuOpts *opts,
.help = "identifier for monitor commands", \
}
-typedef int (*net_client_init_func)(QemuOpts *opts,
- Monitor *mon,
- const char *name,
- VLANState *vlan);
+typedef int NetClientInitFunc(QemuOpts *opts,
+ Monitor *mon,
+ const char *name,
+ VLANClientState *peer);
/* magic number, but compiler will warn if too small */
#define NET_MAX_DESC 20
static const struct {
const char *type;
- net_client_init_func init;
+ NetClientInitFunc *init;
QemuOptDesc desc[NET_MAX_DESC];
} net_client_types[NET_CLIENT_TYPE_MAX] = {
[NET_CLIENT_TYPE_NONE] = {
@@ -1136,7 +1139,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
for (i = 0; i < NET_CLIENT_TYPE_MAX; i++) {
if (net_client_types[i].type != NULL &&
!strcmp(net_client_types[i].type, type)) {
- VLANState *vlan = NULL;
+ VLANClientState *peer = NULL;
int ret;
if (qemu_opts_validate(opts, &net_client_types[i].desc[0]) == -1) {
@@ -1147,12 +1150,12 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
* netdev= parameter. */
if (!(is_netdev ||
(strcmp(type, "nic") == 0 && qemu_opt_get(opts, "netdev")))) {
- vlan = qemu_find_vlan(qemu_opt_get_number(opts, "vlan", 0), 1);
+ peer = net_hub_add_port(qemu_opt_get_number(opts, "vlan", 0));
}
ret = 0;
if (net_client_types[i].init) {
- ret = net_client_types[i].init(opts, mon, name, vlan);
+ ret = net_client_types[i].init(opts, mon, name, peer);
if (ret < 0) {
/* TODO push error reporting into init() methods */
qerror_report(QERR_DEVICE_INIT_FAILED, type);
@@ -1297,6 +1300,7 @@ void do_info_network(Monitor *mon)
print_net_client(mon, peer);
}
}
+ net_hub_info(mon);
}
void qmp_set_link(const char *name, bool up, Error **errp)
diff --git a/net/dump.c b/net/dump.c
index 4b48d48..37cec3c 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -27,6 +27,7 @@
#include "qemu-error.h"
#include "qemu-log.h"
#include "qemu-timer.h"
+#include "hub.h"
typedef struct DumpState {
VLANClientState nc;
@@ -99,7 +100,7 @@ static NetClientInfo net_dump_info = {
.cleanup = dump_cleanup,
};
-static int net_dump_init(VLANState *vlan, const char *device,
+static int net_dump_init(VLANClientState *peer, const char *device,
const char *name, const char *filename, int len)
{
struct pcap_file_hdr hdr;
@@ -128,7 +129,7 @@ static int net_dump_init(VLANState *vlan, const char *device,
return -1;
}
- nc = qemu_new_net_client(&net_dump_info, vlan, NULL, device, name);
+ nc = qemu_new_net_client(&net_dump_info, NULL, peer, device, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"dump to %s (len=%d)", filename, len);
@@ -144,21 +145,28 @@ static int net_dump_init(VLANState *vlan, const char *device,
return 0;
}
-int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer)
{
int len;
const char *file;
char def_file[128];
- assert(vlan);
+ assert(peer);
file = qemu_opt_get(opts, "file");
if (!file) {
- snprintf(def_file, sizeof(def_file), "qemu-vlan%d.pcap", vlan->id);
+ unsigned int id;
+ int ret;
+
+ ret = net_hub_id_for_client(peer, &id);
+ assert(ret == 0); /* peer must be on a hub */
+
+ snprintf(def_file, sizeof(def_file), "qemu-vlan%u.pcap", id);
file = def_file;
}
len = qemu_opt_get_size(opts, "len", 65536);
- return net_dump_init(vlan, "dump", name, file, len);
+ return net_dump_init(peer, "dump", name, file, len);
}
diff --git a/net/dump.h b/net/dump.h
index fdc91ad..408c652 100644
--- a/net/dump.h
+++ b/net/dump.h
@@ -28,6 +28,6 @@
#include "qemu-common.h"
int net_init_dump(QemuOpts *opts, Monitor *mon,
- const char *name, VLANState *vlan);
+ const char *name, VLANClientState *peer);
#endif /* QEMU_NET_DUMP_H */
diff --git a/net/slirp.c b/net/slirp.c
index 96f5032..fa7c7fc 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -134,7 +134,7 @@ static NetClientInfo net_slirp_info = {
.cleanup = net_slirp_cleanup,
};
-static int net_slirp_init(VLANState *vlan, const char *model,
+static int net_slirp_init(VLANClientState *peer, const char *model,
const char *name, int restricted,
const char *vnetwork, const char *vhost,
const char *vhostname, const char *tftp_export,
@@ -237,7 +237,7 @@ static int net_slirp_init(VLANState *vlan, const char *model,
}
#endif
- nc = qemu_new_net_client(&net_slirp_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_slirp_info, NULL, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"net=%s,restrict=%s", inet_ntoa(net),
@@ -679,7 +679,7 @@ static int net_init_slirp_configs(const char *name, const char *value, void *opa
int net_init_slirp(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANState *vlan)
+ VLANClientState *peer)
{
struct slirp_config_str *config;
const char *vhost;
@@ -736,7 +736,7 @@ int net_init_slirp(QemuOpts *opts,
qemu_opt_foreach(opts, net_init_slirp_configs, NULL, 0);
- ret = net_slirp_init(vlan, "user", name, restricted, vnet, vhost,
+ ret = net_slirp_init(peer, "user", name, restricted, vnet, vhost,
vhostname, tftp_export, bootfile, vdhcp_start,
vnamesrv, smb_export, vsmbsrv);
diff --git a/net/slirp.h b/net/slirp.h
index c17de8e..32041cb 100644
--- a/net/slirp.h
+++ b/net/slirp.h
@@ -33,7 +33,7 @@
int net_init_slirp(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANState *vlan);
+ VLANClientState *peer);
void net_slirp_hostfwd_add(Monitor *mon, const QDict *qdict);
void net_slirp_hostfwd_remove(Monitor *mon, const QDict *qdict);
diff --git a/net/socket.c b/net/socket.c
index 0bcf229..ed28cbd 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -43,7 +43,7 @@ typedef struct NetSocketState {
} NetSocketState;
typedef struct NetSocketListenState {
- VLANState *vlan;
+ VLANClientState *peer;
char *model;
char *name;
int fd;
@@ -244,7 +244,7 @@ static NetClientInfo net_dgram_socket_info = {
.cleanup = net_socket_cleanup,
};
-static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan,
+static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
const char *model,
const char *name,
int fd, int is_connected)
@@ -286,7 +286,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan,
}
}
- nc = qemu_new_net_client(&net_dgram_socket_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_dgram_socket_info, NULL, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"socket: fd=%d (%s mcast=%s:%d)",
@@ -322,7 +322,7 @@ static NetClientInfo net_socket_info = {
.cleanup = net_socket_cleanup,
};
-static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
+static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
const char *model,
const char *name,
int fd, int is_connected)
@@ -330,7 +330,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
VLANClientState *nc;
NetSocketState *s;
- nc = qemu_new_net_client(&net_socket_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_socket_info, NULL, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
@@ -346,7 +346,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
return s;
}
-static NetSocketState *net_socket_fd_init(VLANState *vlan,
+static NetSocketState *net_socket_fd_init(VLANClientState *peer,
const char *model, const char *name,
int fd, int is_connected)
{
@@ -361,13 +361,13 @@ static NetSocketState *net_socket_fd_init(VLANState *vlan,
}
switch(so_type) {
case SOCK_DGRAM:
- return net_socket_fd_init_dgram(vlan, model, name, fd, is_connected);
+ return net_socket_fd_init_dgram(peer, model, name, fd, is_connected);
case SOCK_STREAM:
- return net_socket_fd_init_stream(vlan, model, name, fd, is_connected);
+ return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
default:
/* who knows ... this could be a eg. a pty, do warn and continue as stream */
fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
- return net_socket_fd_init_stream(vlan, model, name, fd, is_connected);
+ return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
}
return NULL;
}
@@ -389,15 +389,17 @@ static void net_socket_accept(void *opaque)
break;
}
}
- s1 = net_socket_fd_init(s->vlan, s->model, s->name, fd, 1);
- if (s1) {
+ s1 = net_socket_fd_init(s->peer, s->model, s->name, fd, 1);
+ if (!s1) {
+ closesocket(fd);
+ } else {
snprintf(s1->nc.info_str, sizeof(s1->nc.info_str),
"socket: connection from %s:%d",
inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
}
}
-static int net_socket_listen_init(VLANState *vlan,
+static int net_socket_listen_init(VLANClientState *peer,
const char *model,
const char *name,
const char *host_str)
@@ -437,7 +439,7 @@ static int net_socket_listen_init(VLANState *vlan,
closesocket(fd);
return -1;
}
- s->vlan = vlan;
+ s->peer = peer;
s->model = g_strdup(model);
s->name = name ? g_strdup(name) : NULL;
s->fd = fd;
@@ -445,7 +447,7 @@ static int net_socket_listen_init(VLANState *vlan,
return 0;
}
-static int net_socket_connect_init(VLANState *vlan,
+static int net_socket_connect_init(VLANClientState *peer,
const char *model,
const char *name,
const char *host_str)
@@ -486,7 +488,7 @@ static int net_socket_connect_init(VLANState *vlan,
break;
}
}
- s = net_socket_fd_init(vlan, model, name, fd, connected);
+ s = net_socket_fd_init(peer, model, name, fd, connected);
if (!s)
return -1;
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
@@ -495,7 +497,7 @@ static int net_socket_connect_init(VLANState *vlan,
return 0;
}
-static int net_socket_mcast_init(VLANState *vlan,
+static int net_socket_mcast_init(VLANClientState *peer,
const char *model,
const char *name,
const char *host_str,
@@ -521,7 +523,7 @@ static int net_socket_mcast_init(VLANState *vlan,
if (fd < 0)
return -1;
- s = net_socket_fd_init(vlan, model, name, fd, 0);
+ s = net_socket_fd_init(peer, model, name, fd, 0);
if (!s)
return -1;
@@ -588,7 +590,7 @@ static int net_socket_udp_init(VLANState *vlan,
int net_init_socket(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANState *vlan)
+ VLANClientState *peer)
{
if (qemu_opt_get(opts, "fd")) {
int fd;
@@ -606,7 +608,8 @@ int net_init_socket(QemuOpts *opts,
return -1;
}
- if (!net_socket_fd_init(vlan, "socket", name, fd, 1)) {
+ if (!net_socket_fd_init(peer, "socket", name, fd, 1)) {
+ close(fd);
return -1;
}
} else if (qemu_opt_get(opts, "listen")) {
@@ -622,7 +625,7 @@ int net_init_socket(QemuOpts *opts,
listen = qemu_opt_get(opts, "listen");
- if (net_socket_listen_init(vlan, "socket", name, listen) == -1) {
+ if (net_socket_listen_init(peer, "socket", name, listen) == -1) {
return -1;
}
} else if (qemu_opt_get(opts, "connect")) {
@@ -638,7 +641,7 @@ int net_init_socket(QemuOpts *opts,
connect = qemu_opt_get(opts, "connect");
- if (net_socket_connect_init(vlan, "socket", name, connect) == -1) {
+ if (net_socket_connect_init(peer, "socket", name, connect) == -1) {
return -1;
}
} else if (qemu_opt_get(opts, "mcast")) {
@@ -654,7 +657,8 @@ int net_init_socket(QemuOpts *opts,
mcast = qemu_opt_get(opts, "mcast");
localaddr = qemu_opt_get(opts, "localaddr");
- if (net_socket_mcast_init(vlan, "socket", name, mcast, localaddr) == -1) {
+ if (net_socket_mcast_init(peer, "socket", name,
+ mcast, localaddr) == -1) {
return -1;
}
} else if (qemu_opt_get(opts, "udp")) {
diff --git a/net/socket.h b/net/socket.h
index ea46f02..f6172bc 100644
--- a/net/socket.h
+++ b/net/socket.h
@@ -28,6 +28,6 @@
#include "qemu-common.h"
int net_init_socket(QemuOpts *opts, Monitor *mon,
- const char *name, VLANState *vlan);
+ const char *name, VLANClientState *peer);
#endif /* QEMU_NET_SOCKET_H */
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 596132e..2436c26 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -673,7 +673,7 @@ static NetClientInfo net_tap_win32_info = {
.cleanup = tap_cleanup,
};
-static int tap_win32_init(VLANState *vlan, const char *model,
+static int tap_win32_init(VLANClientState *peer, const char *model,
const char *name, const char *ifname)
{
VLANClientState *nc;
@@ -685,7 +685,7 @@ static int tap_win32_init(VLANState *vlan, const char *model,
return -1;
}
- nc = qemu_new_net_client(&net_tap_win32_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_tap_win32_info, NULL, peer, model, name);
s = DO_UPCAST(TAPState, nc, nc);
@@ -699,7 +699,8 @@ static int tap_win32_init(VLANState *vlan, const char *model,
return 0;
}
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer)
{
const char *ifname;
@@ -710,7 +711,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
return -1;
}
- if (tap_win32_init(vlan, "tap", name, ifname) == -1) {
+ if (tap_win32_init(peer, "tap", name, ifname) == -1) {
return -1;
}
diff --git a/net/tap.c b/net/tap.c
index f240028..8855c57 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -321,7 +321,7 @@ static NetClientInfo net_tap_info = {
.cleanup = tap_cleanup,
};
-static TAPState *net_tap_fd_init(VLANState *vlan,
+static TAPState *net_tap_fd_init(VLANClientState *peer,
const char *model,
const char *name,
int fd,
@@ -330,7 +330,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan,
VLANClientState *nc;
TAPState *s;
- nc = qemu_new_net_client(&net_tap_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_tap_info, NULL, peer, model, name);
s = DO_UPCAST(TAPState, nc, nc);
@@ -583,7 +583,8 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
return fd;
}
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer)
{
TAPState *s;
int fd, vnet_hdr = 0;
diff --git a/net/tap.h b/net/tap.h
index 56c591f..c194684 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -32,7 +32,8 @@
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan);
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer);
int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required);
diff --git a/net/vde.c b/net/vde.c
index ac48ab2..d998daf 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -75,7 +75,7 @@ static NetClientInfo net_vde_info = {
.cleanup = vde_cleanup,
};
-static int net_vde_init(VLANState *vlan, const char *model,
+static int net_vde_init(VLANClientState *peer, const char *model,
const char *name, const char *sock,
int port, const char *group, int mode)
{
@@ -96,7 +96,7 @@ static int net_vde_init(VLANState *vlan, const char *model,
return -1;
}
- nc = qemu_new_net_client(&net_vde_info, vlan, NULL, model, name);
+ nc = qemu_new_net_client(&net_vde_info, NULL, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
sock, vde_datafd(vde));
@@ -110,7 +110,8 @@ static int net_vde_init(VLANState *vlan, const char *model,
return 0;
}
-int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer)
{
const char *sock;
const char *group;
@@ -122,7 +123,7 @@ int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
port = qemu_opt_get_number(opts, "port", 0);
mode = qemu_opt_get_number(opts, "mode", 0700);
- if (net_vde_init(vlan, "vde", name, sock, port, group, mode) == -1) {
+ if (net_vde_init(peer, "vde", name, sock, port, group, mode) == -1) {
return -1;
}
diff --git a/net/vde.h b/net/vde.h
index 3e6ca3e..69c4e92 100644
--- a/net/vde.h
+++ b/net/vde.h
@@ -29,7 +29,8 @@
#ifdef CONFIG_VDE
-int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan);
+int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
+ VLANClientState *peer);
#endif /* CONFIG_VDE */
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 03/16] net: Look up 'vlan' net clients using hubs
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 01/16] net: Add a hub net client zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 02/16] net: Use hubs for the vlan feature zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 04/16] hub: Check that hubs are configured correctly zwu.kernel
` (13 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 28 +---------------------------
net/hub.c | 24 ++++++++++++++++++++++++
net/hub.h | 2 ++
net/slirp.c | 5 +++--
4 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/net.c b/net.c
index 8c02559..d9c7eac 100644
--- a/net.c
+++ b/net.c
@@ -312,32 +312,6 @@ void qemu_del_vlan_client(VLANClientState *vc)
qemu_free_vlan_client(vc);
}
-VLANClientState *
-qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
- const char *client_str)
-{
- VLANState *vlan;
- VLANClientState *vc;
-
- vlan = qemu_find_vlan(vlan_id, 0);
- if (!vlan) {
- monitor_printf(mon, "unknown VLAN %d\n", vlan_id);
- return NULL;
- }
-
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- if (!strcmp(vc->name, client_str)) {
- break;
- }
- }
- if (!vc) {
- monitor_printf(mon, "can't find device %s on VLAN %d\n",
- client_str, vlan_id);
- }
-
- return vc;
-}
-
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
{
VLANClientState *nc;
@@ -1223,7 +1197,7 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
int vlan_id = qdict_get_int(qdict, "vlan_id");
const char *device = qdict_get_str(qdict, "device");
- vc = qemu_find_vlan_client_by_name(mon, vlan_id, device);
+ vc = net_hub_find_client_by_name(vlan_id, device);
if (!vc) {
return;
}
diff --git a/net/hub.c b/net/hub.c
index 0d3df7f..3cd1249 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -159,6 +159,30 @@ VLANClientState *net_hub_add_port(unsigned int hub_id)
}
/**
+ * Find a specific client on a hub
+ */
+VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
+ const char *name)
+{
+ NetHub *hub;
+ NetHubPort *port;
+ VLANClientState *peer;
+
+ QLIST_FOREACH(hub, &hubs, next) {
+ if (hub->id == hub_id) {
+ QLIST_FOREACH(port, &hub->ports, next) {
+ peer = port->nc.peer;
+
+ if (peer && strcmp(peer->name, name) == 0) {
+ return peer;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+/**
* Print hub configuration
*/
void net_hub_info(Monitor *mon)
diff --git a/net/hub.h b/net/hub.h
index 3ca05dc..60d4cae 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -17,6 +17,8 @@
#include "qemu-common.h"
VLANClientState *net_hub_add_port(unsigned int hub_id);
+VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
+ const char *name);
void net_hub_info(Monitor *mon);
int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
diff --git a/net/slirp.c b/net/slirp.c
index fa7c7fc..edb4621 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -29,6 +29,7 @@
#include <sys/wait.h>
#endif
#include "net.h"
+#include "net/hub.h"
#include "monitor.h"
#include "qemu_socket.h"
#include "slirp/libslirp.h"
@@ -283,7 +284,7 @@ static SlirpState *slirp_lookup(Monitor *mon, const char *vlan,
if (vlan) {
VLANClientState *nc;
- nc = qemu_find_vlan_client_by_name(mon, strtol(vlan, NULL, 0), stack);
+ nc = net_hub_find_client_by_name(strtol(vlan, NULL, 0), stack);
if (!nc) {
return NULL;
}
@@ -648,7 +649,7 @@ void do_info_usernet(Monitor *mon)
QTAILQ_FOREACH(s, &slirp_stacks, entry) {
monitor_printf(mon, "VLAN %d (%s):\n",
- s->nc.vlan ? s->nc.vlan->id : -1,
+ -1, /* TODO */
s->nc.name);
slirp_connection_info(s->slirp, mon);
}
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 04/16] hub: Check that hubs are configured correctly
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (2 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
` (12 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Checks can be performed to make sure that hubs have at least one NIC and
one host device, warning the user if this is not the case.
Configurations which do not meet this rule tend to be broken but just
emit a warning. This patch preserves compatibility with the checks
performed by net core on vlans.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 25 +------------------------
net/hub.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
net/hub.h | 1 +
3 files changed, 47 insertions(+), 24 deletions(-)
diff --git a/net.c b/net.c
index d9c7eac..88b9e1f 100644
--- a/net.c
+++ b/net.c
@@ -1337,7 +1337,6 @@ void net_cleanup(void)
void net_check_clients(void)
{
- VLANState *vlan;
VLANClientState *vc;
int i;
@@ -1353,30 +1352,8 @@ void net_check_clients(void)
return;
}
- QTAILQ_FOREACH(vlan, &vlans, next) {
- int has_nic = 0, has_host_dev = 0;
+ net_hub_check_clients();
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- switch (vc->info->type) {
- case NET_CLIENT_TYPE_NIC:
- has_nic = 1;
- break;
- case NET_CLIENT_TYPE_USER:
- case NET_CLIENT_TYPE_TAP:
- case NET_CLIENT_TYPE_SOCKET:
- case NET_CLIENT_TYPE_VDE:
- has_host_dev = 1;
- break;
- default: ;
- }
- }
- if (has_host_dev && !has_nic)
- fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
- if (has_nic && !has_host_dev)
- fprintf(stderr,
- "Warning: vlan %d is not connected to host network\n",
- vlan->id);
- }
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
if (!vc->peer) {
fprintf(stderr, "Warning: %s %s has no peer\n",
diff --git a/net/hub.c b/net/hub.c
index 3cd1249..19c1169 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -222,3 +222,48 @@ int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
}
return -ENOENT;
}
+
+/**
+ * Warn if hub configurations are likely wrong
+ */
+void net_hub_check_clients(void)
+{
+ NetHub *hub;
+ NetHubPort *port;
+ VLANClientState *peer;
+
+ QLIST_FOREACH(hub, &hubs, next) {
+ int has_nic = 0, has_host_dev = 0;
+
+ QLIST_FOREACH(port, &hub->ports, next) {
+ peer = port->nc.peer;
+ if (!peer) {
+ fprintf(stderr, "Warning: hub port %s has no peer\n",
+ port->nc.name);
+ continue;
+ }
+
+ switch (peer->info->type) {
+ case NET_CLIENT_TYPE_NIC:
+ has_nic = 1;
+ break;
+ case NET_CLIENT_TYPE_USER:
+ case NET_CLIENT_TYPE_TAP:
+ case NET_CLIENT_TYPE_SOCKET:
+ case NET_CLIENT_TYPE_VDE:
+ has_host_dev = 1;
+ break;
+ default:
+ break;
+ }
+ }
+ if (has_host_dev && !has_nic) {
+ fprintf(stderr, "Warning: vlan %u with no nics\n", hub->id);
+ }
+ if (has_nic && !has_host_dev) {
+ fprintf(stderr,
+ "Warning: vlan %u is not connected to host network\n",
+ hub->id);
+ }
+ }
+}
diff --git a/net/hub.h b/net/hub.h
index 60d4cae..caa3b16 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -21,5 +21,6 @@ VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
const char *name);
void net_hub_info(Monitor *mon);
int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+void net_hub_check_clients(void);
#endif /* NET_HUB_H */
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 05/16] net: Drop vlan argument to qemu_new_net_client()
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (3 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 04/16] hub: Check that hubs are configured correctly zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 06/16] net: Remove vlan qdev property zwu.kernel
` (11 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Since hubs are now used to implement the 'vlan' feature and the vlan
argument is always NULL, remove the argument entirely and update all net
clients that use qemu_new_net_client().
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 27 ++++++++++-----------------
net.h | 1 -
net/dump.c | 2 +-
net/hub.c | 2 +-
net/slirp.c | 2 +-
net/socket.c | 4 ++--
net/tap-win32.c | 2 +-
net/tap.c | 2 +-
net/vde.c | 2 +-
9 files changed, 18 insertions(+), 26 deletions(-)
diff --git a/net.c b/net.c
index 88b9e1f..96252f9 100644
--- a/net.c
+++ b/net.c
@@ -194,7 +194,6 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
void *opaque);
VLANClientState *qemu_new_net_client(NetClientInfo *info,
- VLANState *vlan,
VLANClientState *peer,
const char *model,
const char *name)
@@ -213,22 +212,16 @@ VLANClientState *qemu_new_net_client(NetClientInfo *info,
vc->name = assign_name(vc, model);
}
- if (vlan) {
- assert(!peer);
- vc->vlan = vlan;
- QTAILQ_INSERT_TAIL(&vc->vlan->clients, vc, next);
- } else {
- if (peer) {
- assert(!peer->peer);
- vc->peer = peer;
- peer->peer = vc;
- }
- QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
-
- vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
- qemu_deliver_packet_iov,
- vc);
+ if (peer) {
+ assert(!peer->peer);
+ vc->peer = peer;
+ peer->peer = vc;
}
+ QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
+
+ vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
+ qemu_deliver_packet_iov,
+ vc);
return vc;
}
@@ -245,7 +238,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
assert(info->type == NET_CLIENT_TYPE_NIC);
assert(info->size >= sizeof(NICState));
- nc = qemu_new_net_client(info, conf->vlan, conf->peer, model, name);
+ nc = qemu_new_net_client(info, conf->peer, model, name);
nic = DO_UPCAST(NICState, nc, nc);
nic->conf = conf;
diff --git a/net.h b/net.h
index 50c55ad..d3d6e4c 100644
--- a/net.h
+++ b/net.h
@@ -92,7 +92,6 @@ struct VLANState {
VLANState *qemu_find_vlan(int id, int allocate);
VLANClientState *qemu_find_netdev(const char *id);
VLANClientState *qemu_new_net_client(NetClientInfo *info,
- VLANState *vlan,
VLANClientState *peer,
const char *model,
const char *name);
diff --git a/net/dump.c b/net/dump.c
index 37cec3c..621f4e7 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -129,7 +129,7 @@ static int net_dump_init(VLANClientState *peer, const char *device,
return -1;
}
- nc = qemu_new_net_client(&net_dump_info, NULL, peer, device, name);
+ nc = qemu_new_net_client(&net_dump_info, peer, device, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"dump to %s (len=%d)", filename, len);
diff --git a/net/hub.c b/net/hub.c
index 19c1169..af3de9c 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -124,7 +124,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
snprintf(name, sizeof name, "hub%uport%u", hub->id, id);
- nc = qemu_new_net_client(&net_hub_port_info, NULL, NULL, "hub", name);
+ nc = qemu_new_net_client(&net_hub_port_info, NULL, "hub", name);
port = DO_UPCAST(NetHubPort, nc, nc);
port->id = id;
port->hub = hub;
diff --git a/net/slirp.c b/net/slirp.c
index edb4621..5ed7036 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -238,7 +238,7 @@ static int net_slirp_init(VLANClientState *peer, const char *model,
}
#endif
- nc = qemu_new_net_client(&net_slirp_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_slirp_info, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"net=%s,restrict=%s", inet_ntoa(net),
diff --git a/net/socket.c b/net/socket.c
index ed28cbd..bf7a793 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -286,7 +286,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
}
}
- nc = qemu_new_net_client(&net_dgram_socket_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_dgram_socket_info, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str),
"socket: fd=%d (%s mcast=%s:%d)",
@@ -330,7 +330,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
VLANClientState *nc;
NetSocketState *s;
- nc = qemu_new_net_client(&net_socket_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_socket_info, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 2436c26..c1f90c7 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -685,7 +685,7 @@ static int tap_win32_init(VLANClientState *peer, const char *model,
return -1;
}
- nc = qemu_new_net_client(&net_tap_win32_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_tap_win32_info, peer, model, name);
s = DO_UPCAST(TAPState, nc, nc);
diff --git a/net/tap.c b/net/tap.c
index 8855c57..3a68d7e 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -330,7 +330,7 @@ static TAPState *net_tap_fd_init(VLANClientState *peer,
VLANClientState *nc;
TAPState *s;
- nc = qemu_new_net_client(&net_tap_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_tap_info, peer, model, name);
s = DO_UPCAST(TAPState, nc, nc);
diff --git a/net/vde.c b/net/vde.c
index d998daf..24d12d4 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -96,7 +96,7 @@ static int net_vde_init(VLANClientState *peer, const char *model,
return -1;
}
- nc = qemu_new_net_client(&net_vde_info, NULL, peer, model, name);
+ nc = qemu_new_net_client(&net_vde_info, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
sock, vde_datafd(vde));
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 06/16] net: Remove vlan qdev property
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (4 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 07/16] net: Remove vlan code from net.c zwu.kernel
` (10 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
The vlan feature is implemented using hubs and no longer uses
special-purpose VLANState structs that are accessible as qdev
properties.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
hw/qdev-properties.c | 72 --------------------------------------------------
hw/qdev.c | 2 -
hw/qdev.h | 4 ---
net.h | 3 --
4 files changed, 0 insertions(+), 81 deletions(-)
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index b7b5597..d2e2afb 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -623,71 +623,6 @@ PropertyInfo qdev_prop_netdev = {
.set = set_netdev,
};
-/* --- vlan --- */
-
-static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len)
-{
- VLANState **ptr = qdev_get_prop_ptr(dev, prop);
-
- if (*ptr) {
- return snprintf(dest, len, "%d", (*ptr)->id);
- } else {
- return snprintf(dest, len, "<null>");
- }
-}
-
-static void get_vlan(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- VLANState **ptr = qdev_get_prop_ptr(dev, prop);
- int64_t id;
-
- id = *ptr ? (*ptr)->id : -1;
- visit_type_int(v, &id, name, errp);
-}
-
-static void set_vlan(Object *obj, Visitor *v, void *opaque,
- const char *name, Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- VLANState **ptr = qdev_get_prop_ptr(dev, prop);
- Error *local_err = NULL;
- int64_t id;
- VLANState *vlan;
-
- if (dev->state != DEV_STATE_CREATED) {
- error_set(errp, QERR_PERMISSION_DENIED);
- return;
- }
-
- visit_type_int(v, &id, name, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
- if (id == -1) {
- *ptr = NULL;
- return;
- }
- vlan = qemu_find_vlan(id, 1);
- if (!vlan) {
- error_set(errp, QERR_INVALID_PARAMETER_VALUE,
- name, prop->info->name);
- return;
- }
- *ptr = vlan;
-}
-
-PropertyInfo qdev_prop_vlan = {
- .name = "vlan",
- .print = print_vlan,
- .get = get_vlan,
- .set = set_vlan,
-};
-
/* --- pointer --- */
/* Not a proper property, just for dirty hacks. TODO Remove it! */
@@ -1094,13 +1029,6 @@ void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *v
assert_no_error(errp);
}
-void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value)
-{
- Error *errp = NULL;
- object_property_set_int(OBJECT(dev), value ? value->id : -1, name, &errp);
- assert_no_error(errp);
-}
-
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value)
{
Error *errp = NULL;
diff --git a/hw/qdev.c b/hw/qdev.c
index 6a8f6bd..49dd303 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -316,8 +316,6 @@ void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
{
qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a);
- if (nd->vlan)
- qdev_prop_set_vlan(dev, "vlan", nd->vlan);
if (nd->netdev)
qdev_prop_set_netdev(dev, "netdev", nd->netdev);
if (nd->nvectors != DEV_NVECTORS_UNSPECIFIED &&
diff --git a/hw/qdev.h b/hw/qdev.h
index 4e90119..0a50a40 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -222,7 +222,6 @@ extern PropertyInfo qdev_prop_macaddr;
extern PropertyInfo qdev_prop_losttickpolicy;
extern PropertyInfo qdev_prop_drive;
extern PropertyInfo qdev_prop_netdev;
-extern PropertyInfo qdev_prop_vlan;
extern PropertyInfo qdev_prop_pci_devfn;
extern PropertyInfo qdev_prop_blocksize;
@@ -277,8 +276,6 @@ extern PropertyInfo qdev_prop_blocksize;
DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
#define DEFINE_PROP_NETDEV(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*)
-#define DEFINE_PROP_VLAN(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, VLANState*)
#define DEFINE_PROP_DRIVE(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
#define DEFINE_PROP_MACADDR(_n, _s, _f) \
@@ -305,7 +302,6 @@ void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
void qdev_prop_set_string(DeviceState *dev, const char *name, char *value);
void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value);
-void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value);
int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT;
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
diff --git a/net.h b/net.h
index d3d6e4c..7d18b10 100644
--- a/net.h
+++ b/net.h
@@ -16,14 +16,12 @@ struct MACAddr {
typedef struct NICConf {
MACAddr macaddr;
- VLANState *vlan;
VLANClientState *peer;
int32_t bootindex;
} NICConf;
#define DEFINE_NIC_PROPERTIES(_state, _conf) \
DEFINE_PROP_MACADDR("mac", _state, _conf.macaddr), \
- DEFINE_PROP_VLAN("vlan", _state, _conf.vlan), \
DEFINE_PROP_NETDEV("netdev", _state, _conf.peer), \
DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1)
@@ -134,7 +132,6 @@ struct NICInfo {
char *model;
char *name;
char *devaddr;
- VLANState *vlan;
VLANClientState *netdev;
int used; /* is this slot in nd_table[] being used? */
int instantiated; /* does this NICInfo correspond to an instantiated NIC? */
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 07/16] net: Remove vlan code from net.c
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (5 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 06/16] net: Remove vlan qdev property zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 08/16] net: Remove VLANState zwu.kernel
` (9 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
The vlan implementation in net.c has been replaced by hubs so we can
remove the code.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
hw/xen_nic.c | 1 -
net.c | 108 ----------------------------------------------------------
net.h | 1 -
3 files changed, 0 insertions(+), 110 deletions(-)
diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 9a59bda..85526fe 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -328,7 +328,6 @@ static int net_init(struct XenDevice *xendev)
return -1;
}
- netdev->conf.vlan = qemu_find_vlan(netdev->xendev.dev, 1);
netdev->conf.peer = NULL;
netdev->nic = qemu_new_nic(&net_xen_info, &netdev->conf,
diff --git a/net.c b/net.c
index 96252f9..abf5a3d 100644
--- a/net.c
+++ b/net.c
@@ -388,50 +388,6 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
return ret;
}
-static ssize_t qemu_vlan_deliver_packet(VLANClientState *sender,
- unsigned flags,
- const uint8_t *buf,
- size_t size,
- void *opaque)
-{
- VLANState *vlan = opaque;
- VLANClientState *vc;
- ssize_t ret = -1;
-
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- ssize_t len;
-
- if (vc == sender) {
- continue;
- }
-
- if (vc->link_down) {
- ret = size;
- continue;
- }
-
- if (vc->receive_disabled) {
- ret = 0;
- continue;
- }
-
- if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) {
- len = vc->info->receive_raw(vc, buf, size);
- } else {
- len = vc->info->receive(vc, buf, size);
- }
-
- if (len == 0) {
- vc->receive_disabled = 1;
- }
-
- ret = (ret >= 0) ? ret : len;
-
- }
-
- return ret;
-}
-
void qemu_purge_queued_packets(VLANClientState *vc)
{
NetQueue *queue;
@@ -538,42 +494,6 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
}
}
-static ssize_t qemu_vlan_deliver_packet_iov(VLANClientState *sender,
- unsigned flags,
- const struct iovec *iov,
- int iovcnt,
- void *opaque)
-{
- VLANState *vlan = opaque;
- VLANClientState *vc;
- ssize_t ret = -1;
-
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- ssize_t len;
-
- if (vc == sender) {
- continue;
- }
-
- if (vc->link_down) {
- ret = iov_size(iov, iovcnt);
- continue;
- }
-
- assert(!(flags & QEMU_NET_PACKET_FLAG_RAW));
-
- if (vc->info->receive_iov) {
- len = vc->info->receive_iov(vc, iov, iovcnt);
- } else {
- len = vc_sendv_compat(vc, iov, iovcnt);
- }
-
- ret = (ret >= 0) ? ret : len;
- }
-
- return ret;
-}
-
ssize_t qemu_sendv_packet_async(VLANClientState *sender,
const struct iovec *iov, int iovcnt,
NetPacketSent *sent_cb)
@@ -601,34 +521,6 @@ qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, int iovcnt)
return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
}
-/* find or alloc a new VLAN */
-VLANState *qemu_find_vlan(int id, int allocate)
-{
- VLANState *vlan;
-
- QTAILQ_FOREACH(vlan, &vlans, next) {
- if (vlan->id == id) {
- return vlan;
- }
- }
-
- if (!allocate) {
- return NULL;
- }
-
- vlan = g_malloc0(sizeof(VLANState));
- vlan->id = id;
- QTAILQ_INIT(&vlan->clients);
-
- vlan->send_queue = qemu_new_net_queue(qemu_vlan_deliver_packet,
- qemu_vlan_deliver_packet_iov,
- vlan);
-
- QTAILQ_INSERT_TAIL(&vlans, vlan, next);
-
- return vlan;
-}
-
VLANClientState *qemu_find_netdev(const char *id)
{
VLANClientState *vc;
diff --git a/net.h b/net.h
index 7d18b10..a4ac48d 100644
--- a/net.h
+++ b/net.h
@@ -87,7 +87,6 @@ struct VLANState {
NetQueue *send_queue;
};
-VLANState *qemu_find_vlan(int id, int allocate);
VLANClientState *qemu_find_netdev(const char *id);
VLANClientState *qemu_new_net_client(NetClientInfo *info,
VLANClientState *peer,
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 08/16] net: Remove VLANState
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (6 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 07/16] net: Remove vlan code from net.c zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
` (8 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
VLANState is no longer used and can be removed.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 127 ++++++++++-----------------------------------------------
net.h | 8 ----
net/socket.c | 6 +-
net/tap.c | 6 +-
net/tap.h | 2 +-
qemu-common.h | 1 -
6 files changed, 29 insertions(+), 121 deletions(-)
diff --git a/net.c b/net.c
index abf5a3d..eb2ad06 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,6 @@
# define CONFIG_NET_BRIDGE
#endif
-static QTAILQ_HEAD(, VLANState) vlans;
static QTAILQ_HEAD(, VLANClientState) non_vlan_clients;
int default_net = 1;
@@ -249,11 +248,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
static void qemu_cleanup_vlan_client(VLANClientState *vc)
{
- if (vc->vlan) {
- QTAILQ_REMOVE(&vc->vlan->clients, vc, next);
- } else {
- QTAILQ_REMOVE(&non_vlan_clients, vc, next);
- }
+ QTAILQ_REMOVE(&non_vlan_clients, vc, next);
if (vc->info->cleanup) {
vc->info->cleanup(vc);
@@ -262,13 +257,11 @@ static void qemu_cleanup_vlan_client(VLANClientState *vc)
static void qemu_free_vlan_client(VLANClientState *vc)
{
- if (!vc->vlan) {
- if (vc->send_queue) {
- qemu_del_net_queue(vc->send_queue);
- }
- if (vc->peer) {
- vc->peer->peer = NULL;
- }
+ if (vc->send_queue) {
+ qemu_del_net_queue(vc->send_queue);
+ }
+ if (vc->peer) {
+ vc->peer->peer = NULL;
}
g_free(vc->name);
g_free(vc->model);
@@ -278,7 +271,7 @@ static void qemu_free_vlan_client(VLANClientState *vc)
void qemu_del_vlan_client(VLANClientState *vc)
{
/* If there is a peer NIC, delete and cleanup client, but do not free. */
- if (!vc->vlan && vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
+ if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
NICState *nic = DO_UPCAST(NICState, nc, vc->peer);
if (nic->peer_deleted) {
return;
@@ -294,7 +287,7 @@ void qemu_del_vlan_client(VLANClientState *vc)
}
/* If this is a peer NIC and peer has already been deleted, free it now. */
- if (!vc->vlan && vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
+ if (vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
NICState *nic = DO_UPCAST(NICState, nc, vc);
if (nic->peer_deleted) {
qemu_free_vlan_client(vc->peer);
@@ -308,52 +301,25 @@ void qemu_del_vlan_client(VLANClientState *vc)
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
{
VLANClientState *nc;
- VLANState *vlan;
QTAILQ_FOREACH(nc, &non_vlan_clients, next) {
if (nc->info->type == NET_CLIENT_TYPE_NIC) {
func(DO_UPCAST(NICState, nc, nc), opaque);
}
}
-
- QTAILQ_FOREACH(vlan, &vlans, next) {
- QTAILQ_FOREACH(nc, &vlan->clients, next) {
- if (nc->info->type == NET_CLIENT_TYPE_NIC) {
- func(DO_UPCAST(NICState, nc, nc), opaque);
- }
- }
- }
}
int qemu_can_send_packet(VLANClientState *sender)
{
- VLANState *vlan = sender->vlan;
- VLANClientState *vc;
-
- if (sender->peer) {
- if (sender->peer->receive_disabled) {
- return 0;
- } else if (sender->peer->info->can_receive &&
- !sender->peer->info->can_receive(sender->peer)) {
- return 0;
- } else {
- return 1;
- }
- }
-
- if (!sender->vlan) {
+ if (!sender->peer) {
return 1;
}
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- if (vc == sender) {
- continue;
- }
-
- /* no can_receive() handler, they can always receive */
- if (vc->info->can_receive && !vc->info->can_receive(vc)) {
- return 0;
- }
+ if (sender->peer->receive_disabled) {
+ return 0;
+ } else if (sender->peer->info->can_receive &&
+ !sender->peer->info->can_receive(sender->peer)) {
+ return 0;
}
return 1;
}
@@ -390,34 +356,18 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
void qemu_purge_queued_packets(VLANClientState *vc)
{
- NetQueue *queue;
-
- if (!vc->peer && !vc->vlan) {
+ if (!vc->peer) {
return;
}
- if (vc->peer) {
- queue = vc->peer->send_queue;
- } else {
- queue = vc->vlan->send_queue;
- }
-
- qemu_net_queue_purge(queue, vc);
+ qemu_net_queue_purge(vc->peer->send_queue, vc);
}
void qemu_flush_queued_packets(VLANClientState *vc)
{
- NetQueue *queue;
-
vc->receive_disabled = 0;
- if (vc->vlan) {
- queue = vc->vlan->send_queue;
- } else {
- queue = vc->send_queue;
- }
-
- qemu_net_queue_flush(queue);
+ qemu_net_queue_flush(vc->send_queue);
}
static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
@@ -432,15 +382,11 @@ static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
hex_dump(stdout, buf, size);
#endif
- if (sender->link_down || (!sender->peer && !sender->vlan)) {
+ if (sender->link_down || !sender->peer) {
return size;
}
- if (sender->peer) {
- queue = sender->peer->send_queue;
- } else {
- queue = sender->vlan->send_queue;
- }
+ queue = sender->peer->send_queue;
return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
}
@@ -500,15 +446,11 @@ ssize_t qemu_sendv_packet_async(VLANClientState *sender,
{
NetQueue *queue;
- if (sender->link_down || (!sender->peer && !sender->vlan)) {
+ if (sender->link_down || !sender->peer) {
return iov_size(iov, iovcnt);
}
- if (sender->peer) {
- queue = sender->peer->send_queue;
- } else {
- queue = sender->vlan->send_queue;
- }
+ queue = sender->peer->send_queue;
return qemu_net_queue_send_iov(queue, sender,
QEMU_NET_PACKET_FLAG_NONE,
@@ -1134,18 +1076,9 @@ static void print_net_client(Monitor *mon, VLANClientState *vc)
void do_info_network(Monitor *mon)
{
- VLANState *vlan;
VLANClientState *vc, *peer;
net_client_type type;
- QTAILQ_FOREACH(vlan, &vlans, next) {
- monitor_printf(mon, "VLAN %d devices:\n", vlan->id);
-
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- monitor_printf(mon, " ");
- print_net_client(mon, vc);
- }
- }
monitor_printf(mon, "Devices not on any VLAN:\n");
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
peer = vc->peer;
@@ -1164,16 +1097,8 @@ void do_info_network(Monitor *mon)
void qmp_set_link(const char *name, bool up, Error **errp)
{
- VLANState *vlan;
VLANClientState *vc = NULL;
- QTAILQ_FOREACH(vlan, &vlans, next) {
- QTAILQ_FOREACH(vc, &vlan->clients, next) {
- if (strcmp(vc->name, name) == 0) {
- goto done;
- }
- }
- }
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
if (!strcmp(vc->name, name)) {
goto done;
@@ -1182,7 +1107,7 @@ void qmp_set_link(const char *name, bool up, Error **errp)
done:
if (!vc) {
- error_set(errp, QERR_DEVICE_NOT_FOUND, name);
+ qerror_report(QERR_DEVICE_NOT_FOUND, name);
return;
}
@@ -1206,15 +1131,8 @@ done:
void net_cleanup(void)
{
- VLANState *vlan;
VLANClientState *vc, *next_vc;
- QTAILQ_FOREACH(vlan, &vlans, next) {
- QTAILQ_FOREACH_SAFE(vc, &vlan->clients, next, next_vc) {
- qemu_del_vlan_client(vc);
- }
- }
-
QTAILQ_FOREACH_SAFE(vc, &non_vlan_clients, next, next_vc) {
qemu_del_vlan_client(vc);
}
@@ -1286,7 +1204,6 @@ int net_init_clients(void)
#endif
}
- QTAILQ_INIT(&vlans);
QTAILQ_INIT(&non_vlan_clients);
if (qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL, 1) == -1)
diff --git a/net.h b/net.h
index a4ac48d..2482546 100644
--- a/net.h
+++ b/net.h
@@ -64,7 +64,6 @@ struct VLANClientState {
NetClientInfo *info;
int link_down;
QTAILQ_ENTRY(VLANClientState) next;
- struct VLANState *vlan;
VLANClientState *peer;
NetQueue *send_queue;
char *model;
@@ -80,13 +79,6 @@ typedef struct NICState {
bool peer_deleted;
} NICState;
-struct VLANState {
- int id;
- QTAILQ_HEAD(, VLANClientState) clients;
- QTAILQ_ENTRY(VLANState) next;
- NetQueue *send_queue;
-};
-
VLANClientState *qemu_find_netdev(const char *id);
VLANClientState *qemu_new_net_client(NetClientInfo *info,
VLANClientState *peer,
diff --git a/net/socket.c b/net/socket.c
index bf7a793..5676bd5 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -536,7 +536,7 @@ static int net_socket_mcast_init(VLANClientState *peer,
}
-static int net_socket_udp_init(VLANState *vlan,
+static int net_socket_udp_init(NetClientState *peer,
const char *model,
const char *name,
const char *rhost,
@@ -574,7 +574,7 @@ static int net_socket_udp_init(VLANState *vlan,
return -1;
}
- s = net_socket_fd_init(vlan, model, name, fd, 0);
+ s = net_socket_fd_init(peer, model, name, fd, 0);
if (!s) {
return -1;
}
@@ -680,7 +680,7 @@ int net_init_socket(QemuOpts *opts,
return -1;
}
- if (net_socket_udp_init(vlan, "udp", name, udp, localaddr) == -1) {
+ if (net_socket_udp_init(peer, "udp", name, udp, localaddr) == -1) {
return -1;
}
} else {
diff --git a/net/tap.c b/net/tap.c
index 3a68d7e..7dbf643 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -513,7 +513,7 @@ static int net_bridge_run_helper(const char *helper, const char *bridge)
}
int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
- VLANState *vlan)
+ NetClientState *peer)
{
TAPState *s;
int fd, vnet_hdr;
@@ -535,7 +535,7 @@ int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
vnet_hdr = tap_probe_vnet_hdr(fd);
- s = net_tap_fd_init(vlan, "bridge", name, fd, vnet_hdr);
+ s = net_tap_fd_init(peer, "bridge", name, fd, vnet_hdr);
if (!s) {
close(fd);
return -1;
@@ -651,7 +651,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
model = "tap";
}
- s = net_tap_fd_init(vlan, model, name, fd, vnet_hdr);
+ s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
if (!s) {
close(fd);
return -1;
diff --git a/net/tap.h b/net/tap.h
index c194684..8d949cd 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -59,6 +59,6 @@ struct vhost_net;
struct vhost_net *tap_get_vhost_net(VLANClientState *vc);
int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
- VLANState *vlan);
+ NetClientState *peer);
#endif /* QEMU_NET_TAP_H */
diff --git a/qemu-common.h b/qemu-common.h
index cccfb42..9443c7a 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -235,7 +235,6 @@ typedef struct TextConsole TextConsole;
typedef TextConsole QEMUConsole;
typedef struct CharDriverState CharDriverState;
typedef struct MACAddr MACAddr;
-typedef struct VLANState VLANState;
typedef struct VLANClientState VLANClientState;
typedef struct i2c_bus i2c_bus;
typedef struct ISABus ISABus;
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 09/16] net: Rename non_vlan_clients to net_clients
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (7 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 08/16] net: Remove VLANState zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
` (7 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
There is no longer a distinction between vlan clients and non-vlan
clients in the net core. The net core only knows about point-to-point
clients which are connected to a peer. It's time to rename the global
list of net clients since it no longer refers to vlans at all.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/net.c b/net.c
index eb2ad06..2ca4285 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,7 @@
# define CONFIG_NET_BRIDGE
#endif
-static QTAILQ_HEAD(, VLANClientState) non_vlan_clients;
+static QTAILQ_HEAD(, VLANClientState) net_clients;
int default_net = 1;
@@ -165,7 +165,7 @@ static char *assign_name(VLANClientState *vc1, const char *model)
char buf[256];
int id = 0;
- QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+ QTAILQ_FOREACH(vc, &net_clients, next) {
if (vc == vc1) {
continue;
}
@@ -216,7 +216,7 @@ VLANClientState *qemu_new_net_client(NetClientInfo *info,
vc->peer = peer;
peer->peer = vc;
}
- QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
+ QTAILQ_INSERT_TAIL(&net_clients, vc, next);
vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
qemu_deliver_packet_iov,
@@ -248,7 +248,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
static void qemu_cleanup_vlan_client(VLANClientState *vc)
{
- QTAILQ_REMOVE(&non_vlan_clients, vc, next);
+ QTAILQ_REMOVE(&net_clients, vc, next);
if (vc->info->cleanup) {
vc->info->cleanup(vc);
@@ -302,7 +302,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
{
VLANClientState *nc;
- QTAILQ_FOREACH(nc, &non_vlan_clients, next) {
+ QTAILQ_FOREACH(nc, &net_clients, next) {
if (nc->info->type == NET_CLIENT_TYPE_NIC) {
func(DO_UPCAST(NICState, nc, nc), opaque);
}
@@ -467,7 +467,7 @@ VLANClientState *qemu_find_netdev(const char *id)
{
VLANClientState *vc;
- QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+ QTAILQ_FOREACH(vc, &net_clients, next) {
if (vc->info->type == NET_CLIENT_TYPE_NIC)
continue;
if (!strcmp(vc->name, id)) {
@@ -1080,7 +1080,7 @@ void do_info_network(Monitor *mon)
net_client_type type;
monitor_printf(mon, "Devices not on any VLAN:\n");
- QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+ QTAILQ_FOREACH(vc, &net_clients, next) {
peer = vc->peer;
type = vc->info->type;
if (!peer || type == NET_CLIENT_TYPE_NIC) {
@@ -1133,7 +1133,7 @@ void net_cleanup(void)
{
VLANClientState *vc, *next_vc;
- QTAILQ_FOREACH_SAFE(vc, &non_vlan_clients, next, next_vc) {
+ QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
qemu_del_vlan_client(vc);
}
}
@@ -1157,7 +1157,7 @@ void net_check_clients(void)
net_hub_check_clients();
- QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+ QTAILQ_FOREACH(vc, &net_clients, next) {
if (!vc->peer) {
fprintf(stderr, "Warning: %s %s has no peer\n",
vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
@@ -1204,7 +1204,7 @@ int net_init_clients(void)
#endif
}
- QTAILQ_INIT(&non_vlan_clients);
+ QTAILQ_INIT(&net_clients);
if (qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL, 1) == -1)
return -1;
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 10/16] net: Rename VLANClientState to NetClientState
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (8 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 11/16] net: Rename vc local variables to nc zwu.kernel
` (6 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
The vlan feature is no longer part of net core. Rename VLANClientState
to NetClientState because net clients are not explicitly associated with
a vlan at all, instead they have a peer net client to which they are
connected.
This patch is a mechanical search-and-replace except for a few
whitespace fixups where changing VLANClientState to NetClientState
misaligned whitespace.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
hw/cadence_gem.c | 8 ++--
hw/dp8393x.c | 6 ++--
hw/e1000.c | 8 ++--
hw/eepro100.c | 6 ++--
hw/etraxfs_eth.c | 8 ++--
hw/lan9118.c | 8 ++--
hw/lance.c | 2 +-
hw/mcf_fec.c | 6 ++--
hw/milkymist-minimac2.c | 6 ++--
hw/mipsnet.c | 6 ++--
hw/musicpal.c | 6 ++--
hw/ne2000-isa.c | 2 +-
hw/ne2000.c | 6 ++--
hw/ne2000.h | 4 +-
hw/opencores_eth.c | 8 ++--
hw/pcnet-pci.c | 2 +-
hw/pcnet.c | 6 ++--
hw/pcnet.h | 6 ++--
hw/qdev-properties.c | 6 ++--
hw/qdev.h | 4 +-
hw/rtl8139.c | 8 ++--
hw/smc91c111.c | 6 ++--
hw/spapr_llan.c | 4 +-
hw/stellaris_enet.c | 6 ++--
hw/usb/dev-network.c | 6 ++--
hw/vhost_net.c | 8 ++--
hw/vhost_net.h | 2 +-
hw/virtio-net.c | 10 +++---
hw/xen_nic.c | 4 +-
hw/xgmac.c | 6 ++--
hw/xilinx_axienet.c | 6 ++--
hw/xilinx_ethlite.c | 6 ++--
net.c | 85 +++++++++++++++++++++++------------------------
net.h | 60 ++++++++++++++++----------------
net/dump.c | 12 +++---
net/dump.h | 2 +-
net/hub.c | 22 ++++++------
net/hub.h | 8 ++--
net/queue.c | 16 ++++----
net/queue.h | 12 +++---
net/slirp.c | 14 ++++----
net/slirp.h | 2 +-
net/socket.c | 28 ++++++++--------
net/socket.h | 2 +-
net/tap-win32.c | 22 ++++++------
net/tap.c | 36 ++++++++++----------
net/tap.h | 18 +++++-----
net/vde.c | 12 +++---
net/vde.h | 2 +-
qemu-common.h | 2 +-
50 files changed, 270 insertions(+), 271 deletions(-)
diff --git a/hw/cadence_gem.c b/hw/cadence_gem.c
index e2140ae..60ee1fd 100644
--- a/hw/cadence_gem.c
+++ b/hw/cadence_gem.c
@@ -405,7 +405,7 @@ static void phy_update_link(GemState *s)
}
}
-static int gem_can_receive(VLANClientState *nc)
+static int gem_can_receive(NetClientState *nc)
{
GemState *s;
@@ -602,7 +602,7 @@ static int gem_mac_address_filter(GemState *s, const uint8_t *packet)
* gem_receive:
* Fit a packet handed to us by QEMU into the receive descriptor ring.
*/
-static ssize_t gem_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t gem_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
unsigned desc[2];
target_phys_addr_t packet_desc_addr, last_desc_addr;
@@ -1146,7 +1146,7 @@ static const MemoryRegionOps gem_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
-static void gem_cleanup(VLANClientState *nc)
+static void gem_cleanup(NetClientState *nc)
{
GemState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -1154,7 +1154,7 @@ static void gem_cleanup(VLANClientState *nc)
s->nic = NULL;
}
-static void gem_set_link(VLANClientState *nc)
+static void gem_set_link(NetClientState *nc)
{
DB_PRINT("\n");
phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque);
diff --git a/hw/dp8393x.c b/hw/dp8393x.c
index 017d074..86598b9 100644
--- a/hw/dp8393x.c
+++ b/hw/dp8393x.c
@@ -673,7 +673,7 @@ static const MemoryRegionOps dp8393x_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static int nic_can_receive(VLANClientState *nc)
+static int nic_can_receive(NetClientState *nc)
{
dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -722,7 +722,7 @@ static int receive_filter(dp8393xState *s, const uint8_t * buf, int size)
return -1;
}
-static ssize_t nic_receive(VLANClientState *nc, const uint8_t * buf, size_t size)
+static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size)
{
dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
uint16_t data[10];
@@ -858,7 +858,7 @@ static void nic_reset(void *opaque)
dp8393x_update_irq(s);
}
-static void nic_cleanup(VLANClientState *nc)
+static void nic_cleanup(NetClientState *nc)
{
dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/e1000.c b/hw/e1000.c
index 4573f13..8c7fd3b 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -720,7 +720,7 @@ receive_filter(E1000State *s, const uint8_t *buf, int size)
}
static void
-e1000_set_link_status(VLANClientState *nc)
+e1000_set_link_status(NetClientState *nc)
{
E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
uint32_t old_status = s->mac_reg[STATUS];
@@ -754,7 +754,7 @@ static bool e1000_has_rxbufs(E1000State *s, size_t total_size)
}
static int
-e1000_can_receive(VLANClientState *nc)
+e1000_can_receive(NetClientState *nc)
{
E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -770,7 +770,7 @@ static uint64_t rx_desc_base(E1000State *s)
}
static ssize_t
-e1000_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
struct e1000_rx_desc desc;
@@ -1185,7 +1185,7 @@ e1000_mmio_setup(E1000State *d)
}
static void
-e1000_cleanup(VLANClientState *nc)
+e1000_cleanup(NetClientState *nc)
{
E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 6279ae3..5725ccf 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1609,7 +1609,7 @@ static const MemoryRegionOps eepro100_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
-static int nic_can_receive(VLANClientState *nc)
+static int nic_can_receive(NetClientState *nc)
{
EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque;
TRACE(RXTX, logout("%p\n", s));
@@ -1619,7 +1619,7 @@ static int nic_can_receive(VLANClientState *nc)
#endif
}
-static ssize_t nic_receive(VLANClientState *nc, const uint8_t * buf, size_t size)
+static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size)
{
/* TODO:
* - Magic packets should set bit 30 in power management driver register.
@@ -1824,7 +1824,7 @@ static const VMStateDescription vmstate_eepro100 = {
}
};
-static void nic_cleanup(VLANClientState *nc)
+static void nic_cleanup(NetClientState *nc)
{
EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c
index 16a0637..1ca5849 100644
--- a/hw/etraxfs_eth.c
+++ b/hw/etraxfs_eth.c
@@ -507,12 +507,12 @@ static int eth_match_groupaddr(struct fs_eth *eth, const unsigned char *sa)
return match;
}
-static int eth_can_receive(VLANClientState *nc)
+static int eth_can_receive(NetClientState *nc)
{
return 1;
}
-static ssize_t eth_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -549,7 +549,7 @@ static int eth_tx_push(void *opaque, unsigned char *buf, int len, bool eop)
return len;
}
-static void eth_set_link(VLANClientState *nc)
+static void eth_set_link(NetClientState *nc)
{
struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
D(printf("%s %d\n", __func__, nc->link_down));
@@ -566,7 +566,7 @@ static const MemoryRegionOps eth_ops = {
}
};
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
{
struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/lan9118.c b/hw/lan9118.c
index 7b4fe87..6a37895 100644
--- a/hw/lan9118.c
+++ b/hw/lan9118.c
@@ -384,7 +384,7 @@ static void phy_update_link(lan9118_state *s)
phy_update_irq(s);
}
-static void lan9118_set_link(VLANClientState *nc)
+static void lan9118_set_link(NetClientState *nc)
{
phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque);
}
@@ -456,7 +456,7 @@ static void lan9118_reset(DeviceState *d)
lan9118_reload_eeprom(s);
}
-static int lan9118_can_receive(VLANClientState *nc)
+static int lan9118_can_receive(NetClientState *nc)
{
return 1;
}
@@ -509,7 +509,7 @@ static int lan9118_filter(lan9118_state *s, const uint8_t *addr)
}
}
-static ssize_t lan9118_receive(VLANClientState *nc, const uint8_t *buf,
+static ssize_t lan9118_receive(NetClientState *nc, const uint8_t *buf,
size_t size)
{
lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -1302,7 +1302,7 @@ static const MemoryRegionOps lan9118_16bit_mem_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void lan9118_cleanup(VLANClientState *nc)
+static void lan9118_cleanup(NetClientState *nc)
{
lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/lance.c b/hw/lance.c
index ce3d46c..1aedb19 100644
--- a/hw/lance.c
+++ b/hw/lance.c
@@ -85,7 +85,7 @@ static const MemoryRegionOps lance_mem_ops = {
},
};
-static void lance_cleanup(VLANClientState *nc)
+static void lance_cleanup(NetClientState *nc)
{
PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/mcf_fec.c b/hw/mcf_fec.c
index ae37bef..3d87c78 100644
--- a/hw/mcf_fec.c
+++ b/hw/mcf_fec.c
@@ -351,13 +351,13 @@ static void mcf_fec_write(void *opaque, target_phys_addr_t addr,
mcf_fec_update(s);
}
-static int mcf_fec_can_receive(VLANClientState *nc)
+static int mcf_fec_can_receive(NetClientState *nc)
{
mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
return s->rx_enabled;
}
-static ssize_t mcf_fec_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
mcf_fec_bd bd;
@@ -439,7 +439,7 @@ static const MemoryRegionOps mcf_fec_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void mcf_fec_cleanup(VLANClientState *nc)
+static void mcf_fec_cleanup(NetClientState *nc)
{
mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/milkymist-minimac2.c b/hw/milkymist-minimac2.c
index 70bf336..0369894 100644
--- a/hw/milkymist-minimac2.c
+++ b/hw/milkymist-minimac2.c
@@ -278,7 +278,7 @@ static void update_rx_interrupt(MilkymistMinimac2State *s)
}
}
-static ssize_t minimac2_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t minimac2_rx(NetClientState *nc, const uint8_t *buf, size_t size)
{
MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -408,7 +408,7 @@ static const MemoryRegionOps minimac2_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static int minimac2_can_rx(VLANClientState *nc)
+static int minimac2_can_rx(NetClientState *nc)
{
MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -422,7 +422,7 @@ static int minimac2_can_rx(VLANClientState *nc)
return 0;
}
-static void minimac2_cleanup(VLANClientState *nc)
+static void minimac2_cleanup(NetClientState *nc)
{
MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/mipsnet.c b/hw/mipsnet.c
index 3107246..9cde90a 100644
--- a/hw/mipsnet.c
+++ b/hw/mipsnet.c
@@ -62,7 +62,7 @@ static int mipsnet_buffer_full(MIPSnetState *s)
return 0;
}
-static int mipsnet_can_receive(VLANClientState *nc)
+static int mipsnet_can_receive(NetClientState *nc)
{
MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -71,7 +71,7 @@ static int mipsnet_can_receive(VLANClientState *nc)
return !mipsnet_buffer_full(s);
}
-static ssize_t mipsnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t mipsnet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -209,7 +209,7 @@ static const VMStateDescription vmstate_mipsnet = {
}
};
-static void mipsnet_cleanup(VLANClientState *nc)
+static void mipsnet_cleanup(NetClientState *nc)
{
MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/musicpal.c b/hw/musicpal.c
index c9f845a..29882f0 100644
--- a/hw/musicpal.c
+++ b/hw/musicpal.c
@@ -182,12 +182,12 @@ static void eth_rx_desc_get(uint32_t addr, mv88w8618_rx_desc *desc)
le32_to_cpus(&desc->next);
}
-static int eth_can_receive(VLANClientState *nc)
+static int eth_can_receive(NetClientState *nc)
{
return 1;
}
-static ssize_t eth_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
uint32_t desc_addr;
@@ -366,7 +366,7 @@ static const MemoryRegionOps mv88w8618_eth_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
{
mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c
index a4a783a..ff4b885 100644
--- a/hw/ne2000-isa.c
+++ b/hw/ne2000-isa.c
@@ -36,7 +36,7 @@ typedef struct ISANE2000State {
NE2000State ne2000;
} ISANE2000State;
-static void isa_ne2000_cleanup(VLANClientState *nc)
+static void isa_ne2000_cleanup(NetClientState *nc)
{
NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/ne2000.c b/hw/ne2000.c
index d02e60c..2339725 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -165,7 +165,7 @@ static int ne2000_buffer_full(NE2000State *s)
return 0;
}
-int ne2000_can_receive(VLANClientState *nc)
+int ne2000_can_receive(NetClientState *nc)
{
NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -176,7 +176,7 @@ int ne2000_can_receive(VLANClientState *nc)
#define MIN_BUF_SIZE 60
-ssize_t ne2000_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
+ssize_t ne2000_receive(NetClientState *nc, const uint8_t *buf, size_t size_)
{
NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
int size = size_;
@@ -703,7 +703,7 @@ void ne2000_setup_io(NE2000State *s, unsigned size)
memory_region_init_io(&s->io, &ne2000_ops, s, "ne2000", size);
}
-static void ne2000_cleanup(VLANClientState *nc)
+static void ne2000_cleanup(NetClientState *nc)
{
NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/ne2000.h b/hw/ne2000.h
index 5fee052..6c196a2 100644
--- a/hw/ne2000.h
+++ b/hw/ne2000.h
@@ -31,5 +31,5 @@ typedef struct NE2000State {
void ne2000_setup_io(NE2000State *s, unsigned size);
extern const VMStateDescription vmstate_ne2000;
void ne2000_reset(NE2000State *s);
-int ne2000_can_receive(VLANClientState *vc);
-ssize_t ne2000_receive(VLANClientState *vc, const uint8_t *buf, size_t size_);
+int ne2000_can_receive(NetClientState *vc);
+ssize_t ne2000_receive(NetClientState *vc, const uint8_t *buf, size_t size_);
diff --git a/hw/opencores_eth.c b/hw/opencores_eth.c
index 350f731..990ec37 100644
--- a/hw/opencores_eth.c
+++ b/hw/opencores_eth.c
@@ -311,7 +311,7 @@ static void open_eth_int_source_write(OpenEthState *s,
s->regs[INT_SOURCE] & s->regs[INT_MASK]);
}
-static void open_eth_set_link_status(VLANClientState *nc)
+static void open_eth_set_link_status(NetClientState *nc)
{
OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -342,7 +342,7 @@ static void open_eth_reset(void *opaque)
open_eth_set_link_status(&s->nic->nc);
}
-static int open_eth_can_receive(VLANClientState *nc)
+static int open_eth_can_receive(NetClientState *nc)
{
OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -351,7 +351,7 @@ static int open_eth_can_receive(VLANClientState *nc)
(rx_desc(s)->len_flags & RXD_E);
}
-static ssize_t open_eth_receive(VLANClientState *nc,
+static ssize_t open_eth_receive(NetClientState *nc,
const uint8_t *buf, size_t size)
{
OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -462,7 +462,7 @@ static ssize_t open_eth_receive(VLANClientState *nc,
return size;
}
-static void open_eth_cleanup(VLANClientState *nc)
+static void open_eth_cleanup(NetClientState *nc)
{
}
diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c
index 34d73aa..8c82667 100644
--- a/hw/pcnet-pci.c
+++ b/hw/pcnet-pci.c
@@ -264,7 +264,7 @@ static void pci_physical_memory_read(void *dma_opaque, target_phys_addr_t addr,
pci_dma_read(dma_opaque, addr, buf, len);
}
-static void pci_pcnet_cleanup(VLANClientState *nc)
+static void pci_pcnet_cleanup(NetClientState *nc)
{
PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/pcnet.c b/hw/pcnet.c
index d769b08..40820b3 100644
--- a/hw/pcnet.c
+++ b/hw/pcnet.c
@@ -1004,7 +1004,7 @@ static int pcnet_tdte_poll(PCNetState *s)
return !!(CSR_CXST(s) & 0x8000);
}
-int pcnet_can_receive(VLANClientState *nc)
+int pcnet_can_receive(NetClientState *nc)
{
PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
if (CSR_STOP(s) || CSR_SPND(s))
@@ -1015,7 +1015,7 @@ int pcnet_can_receive(VLANClientState *nc)
#define MIN_BUF_SIZE 60
-ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
+ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_)
{
PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
int is_padr = 0, is_bcast = 0, is_ladr = 0;
@@ -1197,7 +1197,7 @@ ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
return size_;
}
-void pcnet_set_link_status(VLANClientState *nc)
+void pcnet_set_link_status(NetClientState *nc)
{
PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/pcnet.h b/hw/pcnet.h
index 803a2cc..d0af54a 100644
--- a/hw/pcnet.h
+++ b/hw/pcnet.h
@@ -57,9 +57,9 @@ uint32_t pcnet_ioport_readw(void *opaque, uint32_t addr);
void pcnet_ioport_writel(void *opaque, uint32_t addr, uint32_t val);
uint32_t pcnet_ioport_readl(void *opaque, uint32_t addr);
uint32_t pcnet_bcr_readw(PCNetState *s, uint32_t rap);
-int pcnet_can_receive(VLANClientState *nc);
-ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_);
-void pcnet_set_link_status(VLANClientState *nc);
+int pcnet_can_receive(NetClientState *nc);
+ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_);
+void pcnet_set_link_status(NetClientState *nc);
void pcnet_common_cleanup(PCNetState *d);
int pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info);
extern const VMStateDescription vmstate_pcnet;
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index d2e2afb..1c13bda 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -586,7 +586,7 @@ PropertyInfo qdev_prop_chr = {
static int parse_netdev(DeviceState *dev, const char *str, void **ptr)
{
- VLANClientState *netdev = qemu_find_netdev(str);
+ NetClientState *netdev = qemu_find_netdev(str);
if (netdev == NULL) {
return -ENOENT;
@@ -600,7 +600,7 @@ static int parse_netdev(DeviceState *dev, const char *str, void **ptr)
static const char *print_netdev(void *ptr)
{
- VLANClientState *netdev = ptr;
+ NetClientState *netdev = ptr;
return netdev->name ? netdev->name : "";
}
@@ -1020,7 +1020,7 @@ void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *valu
assert_no_error(errp);
}
-void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value)
+void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value)
{
Error *errp = NULL;
assert(!value || value->name);
diff --git a/hw/qdev.h b/hw/qdev.h
index 0a50a40..edbf8fa 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -275,7 +275,7 @@ extern PropertyInfo qdev_prop_blocksize;
#define DEFINE_PROP_STRING(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
#define DEFINE_PROP_NETDEV(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*)
+ DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*)
#define DEFINE_PROP_DRIVE(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
#define DEFINE_PROP_MACADDR(_n, _s, _f) \
@@ -301,7 +301,7 @@ void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value);
void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
void qdev_prop_set_string(DeviceState *dev, const char *name, char *value);
void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
-void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value);
+void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value);
int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT;
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index eb22d04..1e4f4eb 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -781,7 +781,7 @@ static inline dma_addr_t rtl8139_addr64(uint32_t low, uint32_t high)
#endif
}
-static int rtl8139_can_receive(VLANClientState *nc)
+static int rtl8139_can_receive(NetClientState *nc)
{
RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
int avail;
@@ -806,7 +806,7 @@ static int rtl8139_can_receive(VLANClientState *nc)
}
}
-static ssize_t rtl8139_do_receive(VLANClientState *nc, const uint8_t *buf, size_t size_, int do_interrupt)
+static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t size_, int do_interrupt)
{
RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
/* size is the length of the buffer passed to the driver */
@@ -1185,7 +1185,7 @@ static ssize_t rtl8139_do_receive(VLANClientState *nc, const uint8_t *buf, size_
return size_;
}
-static ssize_t rtl8139_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t rtl8139_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
return rtl8139_do_receive(nc, buf, size, 1);
}
@@ -3429,7 +3429,7 @@ static void rtl8139_timer(void *opaque)
rtl8139_set_next_tctr_time(s, qemu_get_clock_ns(vm_clock));
}
-static void rtl8139_cleanup(VLANClientState *nc)
+static void rtl8139_cleanup(NetClientState *nc)
{
RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/smc91c111.c b/hw/smc91c111.c
index 1a5213f..aaa2c60 100644
--- a/hw/smc91c111.c
+++ b/hw/smc91c111.c
@@ -628,7 +628,7 @@ static uint32_t smc91c111_readl(void *opaque, target_phys_addr_t offset)
return val;
}
-static int smc91c111_can_receive(VLANClientState *nc)
+static int smc91c111_can_receive(NetClientState *nc)
{
smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -639,7 +639,7 @@ static int smc91c111_can_receive(VLANClientState *nc)
return 1;
}
-static ssize_t smc91c111_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t smc91c111_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
int status;
@@ -728,7 +728,7 @@ static const MemoryRegionOps smc91c111_mem_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void smc91c111_cleanup(VLANClientState *nc)
+static void smc91c111_cleanup(NetClientState *nc)
{
smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/spapr_llan.c b/hw/spapr_llan.c
index 8313043..76fa0b5 100644
--- a/hw/spapr_llan.c
+++ b/hw/spapr_llan.c
@@ -83,14 +83,14 @@ typedef struct VIOsPAPRVLANDevice {
target_ulong rxq_ptr;
} VIOsPAPRVLANDevice;
-static int spapr_vlan_can_receive(VLANClientState *nc)
+static int spapr_vlan_can_receive(NetClientState *nc)
{
VIOsPAPRVLANDevice *dev = DO_UPCAST(NICState, nc, nc)->opaque;
return (dev->isopen && dev->rx_bufs > 0);
}
-static ssize_t spapr_vlan_receive(VLANClientState *nc, const uint8_t *buf,
+static ssize_t spapr_vlan_receive(NetClientState *nc, const uint8_t *buf,
size_t size)
{
VIOsPAPRDevice *sdev = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/stellaris_enet.c b/hw/stellaris_enet.c
index fbe99cb..fcc6cd0 100644
--- a/hw/stellaris_enet.c
+++ b/hw/stellaris_enet.c
@@ -78,7 +78,7 @@ static void stellaris_enet_update(stellaris_enet_state *s)
}
/* TODO: Implement MAC address filtering. */
-static ssize_t stellaris_enet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
int n;
@@ -120,7 +120,7 @@ static ssize_t stellaris_enet_receive(VLANClientState *nc, const uint8_t *buf, s
return size;
}
-static int stellaris_enet_can_receive(VLANClientState *nc)
+static int stellaris_enet_can_receive(NetClientState *nc)
{
stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -381,7 +381,7 @@ static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
-static void stellaris_enet_cleanup(VLANClientState *nc)
+static void stellaris_enet_cleanup(NetClientState *nc)
{
stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index b238a09..21e0069 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1247,7 +1247,7 @@ static int usb_net_handle_data(USBDevice *dev, USBPacket *p)
return ret;
}
-static ssize_t usbnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t usbnet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
struct rndis_packet_msg_type *msg;
@@ -1285,7 +1285,7 @@ static ssize_t usbnet_receive(VLANClientState *nc, const uint8_t *buf, size_t si
return size;
}
-static int usbnet_can_receive(VLANClientState *nc)
+static int usbnet_can_receive(NetClientState *nc)
{
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -1296,7 +1296,7 @@ static int usbnet_can_receive(VLANClientState *nc)
return !s->in_len;
}
-static void usbnet_cleanup(VLANClientState *nc)
+static void usbnet_cleanup(NetClientState *nc)
{
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/vhost_net.c b/hw/vhost_net.c
index f672e9d..c3e6546 100644
--- a/hw/vhost_net.c
+++ b/hw/vhost_net.c
@@ -42,7 +42,7 @@ struct vhost_net {
struct vhost_dev dev;
struct vhost_virtqueue vqs[2];
int backend;
- VLANClientState *vc;
+ NetClientState *vc;
};
unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
@@ -80,7 +80,7 @@ void vhost_net_ack_features(struct vhost_net *net, unsigned features)
}
}
-static int vhost_net_get_fd(VLANClientState *backend)
+static int vhost_net_get_fd(NetClientState *backend)
{
switch (backend->info->type) {
case NET_CLIENT_TYPE_TAP:
@@ -91,7 +91,7 @@ static int vhost_net_get_fd(VLANClientState *backend)
}
}
-struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd,
+struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
bool force)
{
int r;
@@ -214,7 +214,7 @@ void vhost_net_cleanup(struct vhost_net *net)
g_free(net);
}
#else
-struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd,
+struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
bool force)
{
error_report("vhost-net support is not compiled in");
diff --git a/hw/vhost_net.h b/hw/vhost_net.h
index 91e40b1..a9db234 100644
--- a/hw/vhost_net.h
+++ b/hw/vhost_net.h
@@ -6,7 +6,7 @@
struct vhost_net;
typedef struct vhost_net VHostNetState;
-VHostNetState *vhost_net_init(VLANClientState *backend, int devfd, bool force);
+VHostNetState *vhost_net_init(NetClientState *backend, int devfd, bool force);
bool vhost_net_query(VHostNetState *net, VirtIODevice *dev);
int vhost_net_start(VHostNetState *net, VirtIODevice *dev);
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 3f190d4..a73c523 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -163,7 +163,7 @@ static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status)
}
}
-static void virtio_net_set_link_status(VLANClientState *nc)
+static void virtio_net_set_link_status(NetClientState *nc)
{
VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
uint16_t old_status = n->status;
@@ -453,7 +453,7 @@ static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq)
qemu_notify_event();
}
-static int virtio_net_can_receive(VLANClientState *nc)
+static int virtio_net_can_receive(NetClientState *nc)
{
VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
if (!n->vdev.vm_running) {
@@ -593,7 +593,7 @@ static int receive_filter(VirtIONet *n, const uint8_t *buf, int size)
return 0;
}
-static ssize_t virtio_net_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
struct virtio_net_hdr_mrg_rxbuf *mhdr = NULL;
@@ -690,7 +690,7 @@ static ssize_t virtio_net_receive(VLANClientState *nc, const uint8_t *buf, size_
static int32_t virtio_net_flush_tx(VirtIONet *n, VirtQueue *vq);
-static void virtio_net_tx_complete(VLANClientState *nc, ssize_t len)
+static void virtio_net_tx_complete(NetClientState *nc, ssize_t len)
{
VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -980,7 +980,7 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
-static void virtio_net_cleanup(VLANClientState *nc)
+static void virtio_net_cleanup(NetClientState *nc)
{
VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 85526fe..6391a04 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -236,7 +236,7 @@ static void net_rx_response(struct XenNetDev *netdev,
#define NET_IP_ALIGN 2
-static int net_rx_ok(VLANClientState *nc)
+static int net_rx_ok(NetClientState *nc)
{
struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque;
RING_IDX rc, rp;
@@ -257,7 +257,7 @@ static int net_rx_ok(VLANClientState *nc)
return 1;
}
-static ssize_t net_rx_packet(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_rx_packet(NetClientState *nc, const uint8_t *buf, size_t size)
{
struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque;
netif_rx_request_t rxreq;
diff --git a/hw/xgmac.c b/hw/xgmac.c
index dd4bdc4..b2cae49 100644
--- a/hw/xgmac.c
+++ b/hw/xgmac.c
@@ -308,7 +308,7 @@ static const MemoryRegionOps enet_mem_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
{
struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -316,7 +316,7 @@ static int eth_can_rx(VLANClientState *nc)
return s->regs[DMA_CONTROL] & DMA_CONTROL_SR;
}
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
{
struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff,
@@ -364,7 +364,7 @@ out:
return ret;
}
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
{
struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
s->nic = NULL;
diff --git a/hw/xilinx_axienet.c b/hw/xilinx_axienet.c
index 7526273..512bf05 100644
--- a/hw/xilinx_axienet.c
+++ b/hw/xilinx_axienet.c
@@ -612,7 +612,7 @@ static const MemoryRegionOps enet_ops = {
.endianness = DEVICE_LITTLE_ENDIAN,
};
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
{
struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -635,7 +635,7 @@ static int enet_match_addr(const uint8_t *buf, uint32_t f0, uint32_t f1)
return match;
}
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
{
struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff,
@@ -780,7 +780,7 @@ static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
return size;
}
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
{
/* FIXME. */
struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c
index 857b33d..57cf453 100644
--- a/hw/xilinx_ethlite.c
+++ b/hw/xilinx_ethlite.c
@@ -160,7 +160,7 @@ static const MemoryRegionOps eth_ops = {
}
};
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
{
struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
int r;
@@ -168,7 +168,7 @@ static int eth_can_rx(VLANClientState *nc)
return r;
}
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
{
struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
unsigned int rxbase = s->rxbuf * (0x800 / 4);
@@ -194,7 +194,7 @@ static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
return size;
}
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
{
struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/net.c b/net.c
index 2ca4285..de18c76 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,7 @@
# define CONFIG_NET_BRIDGE
#endif
-static QTAILQ_HEAD(, VLANClientState) net_clients;
+static QTAILQ_HEAD(, NetClientState) net_clients;
int default_net = 1;
@@ -129,7 +129,7 @@ int parse_host_port(struct sockaddr_in *saddr, const char *str)
return 0;
}
-void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6])
+void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6])
{
snprintf(vc->info_str, sizeof(vc->info_str),
"model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
@@ -159,9 +159,9 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
* Only net clients created with the legacy -net option need this. Naming is
* mandatory for net clients created with -netdev.
*/
-static char *assign_name(VLANClientState *vc1, const char *model)
+static char *assign_name(NetClientState *vc1, const char *model)
{
- VLANClientState *vc;
+ NetClientState *vc;
char buf[256];
int id = 0;
@@ -181,25 +181,25 @@ static char *assign_name(VLANClientState *vc1, const char *model)
return g_strdup(buf);
}
-static ssize_t qemu_deliver_packet(VLANClientState *sender,
+static ssize_t qemu_deliver_packet(NetClientState *sender,
unsigned flags,
const uint8_t *data,
size_t size,
void *opaque);
-static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
void *opaque);
-VLANClientState *qemu_new_net_client(NetClientInfo *info,
- VLANClientState *peer,
- const char *model,
- const char *name)
+NetClientState *qemu_new_net_client(NetClientInfo *info,
+ NetClientState *peer,
+ const char *model,
+ const char *name)
{
- VLANClientState *vc;
+ NetClientState *vc;
- assert(info->size >= sizeof(VLANClientState));
+ assert(info->size >= sizeof(NetClientState));
vc = g_malloc0(info->size);
@@ -231,7 +231,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
const char *name,
void *opaque)
{
- VLANClientState *nc;
+ NetClientState *nc;
NICState *nic;
assert(info->type == NET_CLIENT_TYPE_NIC);
@@ -246,7 +246,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
return nic;
}
-static void qemu_cleanup_vlan_client(VLANClientState *vc)
+static void qemu_cleanup_vlan_client(NetClientState *vc)
{
QTAILQ_REMOVE(&net_clients, vc, next);
@@ -255,7 +255,7 @@ static void qemu_cleanup_vlan_client(VLANClientState *vc)
}
}
-static void qemu_free_vlan_client(VLANClientState *vc)
+static void qemu_free_vlan_client(NetClientState *vc)
{
if (vc->send_queue) {
qemu_del_net_queue(vc->send_queue);
@@ -268,7 +268,7 @@ static void qemu_free_vlan_client(VLANClientState *vc)
g_free(vc);
}
-void qemu_del_vlan_client(VLANClientState *vc)
+void qemu_del_vlan_client(NetClientState *vc)
{
/* If there is a peer NIC, delete and cleanup client, but do not free. */
if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
@@ -300,7 +300,7 @@ void qemu_del_vlan_client(VLANClientState *vc)
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
{
- VLANClientState *nc;
+ NetClientState *nc;
QTAILQ_FOREACH(nc, &net_clients, next) {
if (nc->info->type == NET_CLIENT_TYPE_NIC) {
@@ -309,7 +309,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
}
}
-int qemu_can_send_packet(VLANClientState *sender)
+int qemu_can_send_packet(NetClientState *sender)
{
if (!sender->peer) {
return 1;
@@ -324,13 +324,13 @@ int qemu_can_send_packet(VLANClientState *sender)
return 1;
}
-static ssize_t qemu_deliver_packet(VLANClientState *sender,
+static ssize_t qemu_deliver_packet(NetClientState *sender,
unsigned flags,
const uint8_t *data,
size_t size,
void *opaque)
{
- VLANClientState *vc = opaque;
+ NetClientState *vc = opaque;
ssize_t ret;
if (vc->link_down) {
@@ -354,7 +354,7 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
return ret;
}
-void qemu_purge_queued_packets(VLANClientState *vc)
+void qemu_purge_queued_packets(NetClientState *vc)
{
if (!vc->peer) {
return;
@@ -363,14 +363,14 @@ void qemu_purge_queued_packets(VLANClientState *vc)
qemu_net_queue_purge(vc->peer->send_queue, vc);
}
-void qemu_flush_queued_packets(VLANClientState *vc)
+void qemu_flush_queued_packets(NetClientState *vc)
{
vc->receive_disabled = 0;
qemu_net_queue_flush(vc->send_queue);
}
-static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
+static ssize_t qemu_send_packet_async_with_flags(NetClientState *sender,
unsigned flags,
const uint8_t *buf, int size,
NetPacketSent *sent_cb)
@@ -391,7 +391,7 @@ static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
}
-ssize_t qemu_send_packet_async(VLANClientState *sender,
+ssize_t qemu_send_packet_async(NetClientState *sender,
const uint8_t *buf, int size,
NetPacketSent *sent_cb)
{
@@ -399,18 +399,18 @@ ssize_t qemu_send_packet_async(VLANClientState *sender,
buf, size, sent_cb);
}
-void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size)
+void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size)
{
qemu_send_packet_async(vc, buf, size, NULL);
}
-ssize_t qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size)
+ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size)
{
return qemu_send_packet_async_with_flags(vc, QEMU_NET_PACKET_FLAG_RAW,
buf, size, NULL);
}
-static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov,
+static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
int iovcnt)
{
uint8_t buffer[4096];
@@ -421,13 +421,13 @@ static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov,
return vc->info->receive(vc, buffer, offset);
}
-static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
void *opaque)
{
- VLANClientState *vc = opaque;
+ NetClientState *vc = opaque;
if (vc->link_down) {
return iov_size(iov, iovcnt);
@@ -440,7 +440,7 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
}
}
-ssize_t qemu_sendv_packet_async(VLANClientState *sender,
+ssize_t qemu_sendv_packet_async(NetClientState *sender,
const struct iovec *iov, int iovcnt,
NetPacketSent *sent_cb)
{
@@ -458,14 +458,14 @@ ssize_t qemu_sendv_packet_async(VLANClientState *sender,
}
ssize_t
-qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, int iovcnt)
+qemu_sendv_packet(NetClientState *vc, const struct iovec *iov, int iovcnt)
{
return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
}
-VLANClientState *qemu_find_netdev(const char *id)
+NetClientState *qemu_find_netdev(const char *id)
{
- VLANClientState *vc;
+ NetClientState *vc;
QTAILQ_FOREACH(vc, &net_clients, next) {
if (vc->info->type == NET_CLIENT_TYPE_NIC)
@@ -552,7 +552,7 @@ int net_handle_fd_param(Monitor *mon, const char *param)
static int net_init_nic(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
int idx;
NICInfo *nd;
@@ -627,7 +627,7 @@ static int net_init_nic(QemuOpts *opts,
typedef int NetClientInitFunc(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANClientState *peer);
+ NetClientState *peer);
/* magic number, but compiler will warn if too small */
#define NET_MAX_DESC 20
@@ -940,7 +940,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
for (i = 0; i < NET_CLIENT_TYPE_MAX; i++) {
if (net_client_types[i].type != NULL &&
!strcmp(net_client_types[i].type, type)) {
- VLANClientState *peer = NULL;
+ NetClientState *peer = NULL;
int ret;
if (qemu_opts_validate(opts, &net_client_types[i].desc[0]) == -1) {
@@ -1020,7 +1020,7 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
void net_host_device_remove(Monitor *mon, const QDict *qdict)
{
- VLANClientState *vc;
+ NetClientState *vc;
int vlan_id = qdict_get_int(qdict, "vlan_id");
const char *device = qdict_get_str(qdict, "device");
@@ -1056,7 +1056,7 @@ int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
const char *id = qdict_get_str(qdict, "id");
- VLANClientState *vc;
+ NetClientState *vc;
vc = qemu_find_netdev(id);
if (!vc) {
@@ -1068,7 +1068,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
return 0;
}
-static void print_net_client(Monitor *mon, VLANClientState *vc)
+static void print_net_client(Monitor *mon, NetClientState *vc)
{
monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
net_client_types[vc->info->type].type, vc->info_str);
@@ -1076,7 +1076,7 @@ static void print_net_client(Monitor *mon, VLANClientState *vc)
void do_info_network(Monitor *mon)
{
- VLANClientState *vc, *peer;
+ NetClientState *vc, *peer;
net_client_type type;
monitor_printf(mon, "Devices not on any VLAN:\n");
@@ -1105,7 +1105,6 @@ void qmp_set_link(const char *name, bool up, Error **errp)
}
}
done:
-
if (!vc) {
qerror_report(QERR_DEVICE_NOT_FOUND, name);
return;
@@ -1131,7 +1130,7 @@ done:
void net_cleanup(void)
{
- VLANClientState *vc, *next_vc;
+ NetClientState *vc, *next_vc;
QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
qemu_del_vlan_client(vc);
@@ -1140,7 +1139,7 @@ void net_cleanup(void)
void net_check_clients(void)
{
- VLANClientState *vc;
+ NetClientState *vc;
int i;
/* Don't warn about the default network setup that you get if
diff --git a/net.h b/net.h
index 2482546..4a91f41 100644
--- a/net.h
+++ b/net.h
@@ -16,7 +16,7 @@ struct MACAddr {
typedef struct NICConf {
MACAddr macaddr;
- VLANClientState *peer;
+ NetClientState *peer;
int32_t bootindex;
} NICConf;
@@ -25,7 +25,7 @@ typedef struct NICConf {
DEFINE_PROP_NETDEV("netdev", _state, _conf.peer), \
DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1)
-/* VLANs support */
+/* Net clients */
typedef enum {
NET_CLIENT_TYPE_NONE,
@@ -41,12 +41,12 @@ typedef enum {
NET_CLIENT_TYPE_MAX
} net_client_type;
-typedef void (NetPoll)(VLANClientState *, bool enable);
-typedef int (NetCanReceive)(VLANClientState *);
-typedef ssize_t (NetReceive)(VLANClientState *, const uint8_t *, size_t);
-typedef ssize_t (NetReceiveIOV)(VLANClientState *, const struct iovec *, int);
-typedef void (NetCleanup) (VLANClientState *);
-typedef void (LinkStatusChanged)(VLANClientState *);
+typedef void (NetPoll)(NetClientState *, bool enable);
+typedef int (NetCanReceive)(NetClientState *);
+typedef ssize_t (NetReceive)(NetClientState *, const uint8_t *, size_t);
+typedef ssize_t (NetReceiveIOV)(NetClientState *, const struct iovec *, int);
+typedef void (NetCleanup) (NetClientState *);
+typedef void (LinkStatusChanged)(NetClientState *);
typedef struct NetClientInfo {
net_client_type type;
@@ -60,11 +60,11 @@ typedef struct NetClientInfo {
NetPoll *poll;
} NetClientInfo;
-struct VLANClientState {
+struct NetClientState {
NetClientInfo *info;
int link_down;
- QTAILQ_ENTRY(VLANClientState) next;
- VLANClientState *peer;
+ QTAILQ_ENTRY(NetClientState) next;
+ NetClientState *peer;
NetQueue *send_queue;
char *model;
char *name;
@@ -73,39 +73,39 @@ struct VLANClientState {
};
typedef struct NICState {
- VLANClientState nc;
+ NetClientState nc;
NICConf *conf;
void *opaque;
bool peer_deleted;
} NICState;
-VLANClientState *qemu_find_netdev(const char *id);
-VLANClientState *qemu_new_net_client(NetClientInfo *info,
- VLANClientState *peer,
- const char *model,
- const char *name);
+NetClientState *qemu_find_netdev(const char *id);
+NetClientState *qemu_new_net_client(NetClientInfo *info,
+ NetClientState *peer,
+ const char *model,
+ const char *name);
NICState *qemu_new_nic(NetClientInfo *info,
NICConf *conf,
const char *model,
const char *name,
void *opaque);
-void qemu_del_vlan_client(VLANClientState *vc);
-VLANClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
- const char *client_str);
+void qemu_del_vlan_client(NetClientState *vc);
+NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
+ const char *client_str);
typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque);
-int qemu_can_send_packet(VLANClientState *vc);
-ssize_t qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov,
+int qemu_can_send_packet(NetClientState *vc);
+ssize_t qemu_sendv_packet(NetClientState *vc, const struct iovec *iov,
int iovcnt);
-ssize_t qemu_sendv_packet_async(VLANClientState *vc, const struct iovec *iov,
+ssize_t qemu_sendv_packet_async(NetClientState *vc, const struct iovec *iov,
int iovcnt, NetPacketSent *sent_cb);
-void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_async(VLANClientState *vc, const uint8_t *buf,
+void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_async(NetClientState *vc, const uint8_t *buf,
int size, NetPacketSent *sent_cb);
-void qemu_purge_queued_packets(VLANClientState *vc);
-void qemu_flush_queued_packets(VLANClientState *vc);
-void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]);
+void qemu_purge_queued_packets(NetClientState *vc);
+void qemu_flush_queued_packets(NetClientState *vc);
+void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6]);
void qemu_macaddr_default_if_unset(MACAddr *macaddr);
int qemu_show_nic_models(const char *arg, const char *const *models);
void qemu_check_nic_model(NICInfo *nd, const char *model);
@@ -123,7 +123,7 @@ struct NICInfo {
char *model;
char *name;
char *devaddr;
- VLANClientState *netdev;
+ NetClientState *netdev;
int used; /* is this slot in nd_table[] being used? */
int instantiated; /* does this NICInfo correspond to an instantiated NIC? */
int nvectors;
diff --git a/net/dump.c b/net/dump.c
index 621f4e7..0f191d3 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -30,7 +30,7 @@
#include "hub.h"
typedef struct DumpState {
- VLANClientState nc;
+ NetClientState nc;
int64_t start_ts;
int fd;
int pcap_caplen;
@@ -57,7 +57,7 @@ struct pcap_sf_pkthdr {
uint32_t len;
};
-static ssize_t dump_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t dump_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
DumpState *s = DO_UPCAST(DumpState, nc, nc);
struct pcap_sf_pkthdr hdr;
@@ -86,7 +86,7 @@ static ssize_t dump_receive(VLANClientState *nc, const uint8_t *buf, size_t size
return size;
}
-static void dump_cleanup(VLANClientState *nc)
+static void dump_cleanup(NetClientState *nc)
{
DumpState *s = DO_UPCAST(DumpState, nc, nc);
@@ -100,11 +100,11 @@ static NetClientInfo net_dump_info = {
.cleanup = dump_cleanup,
};
-static int net_dump_init(VLANClientState *peer, const char *device,
+static int net_dump_init(NetClientState *peer, const char *device,
const char *name, const char *filename, int len)
{
struct pcap_file_hdr hdr;
- VLANClientState *nc;
+ NetClientState *nc;
DumpState *s;
struct tm tm;
int fd;
@@ -146,7 +146,7 @@ static int net_dump_init(VLANClientState *peer, const char *device,
}
int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
int len;
const char *file;
diff --git a/net/dump.h b/net/dump.h
index 408c652..df22afe 100644
--- a/net/dump.h
+++ b/net/dump.h
@@ -28,6 +28,6 @@
#include "qemu-common.h"
int net_init_dump(QemuOpts *opts, Monitor *mon,
- const char *name, VLANClientState *peer);
+ const char *name, NetClientState *peer);
#endif /* QEMU_NET_DUMP_H */
diff --git a/net/hub.c b/net/hub.c
index af3de9c..0cc385e 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -24,7 +24,7 @@
typedef struct NetHub NetHub;
typedef struct NetHubPort {
- VLANClientState nc;
+ NetClientState nc;
QLIST_ENTRY(NetHubPort) next;
NetHub *hub;
unsigned int id;
@@ -84,7 +84,7 @@ static NetHub *net_hub_new(unsigned int id)
return hub;
}
-static ssize_t net_hub_port_receive(VLANClientState *nc,
+static ssize_t net_hub_port_receive(NetClientState *nc,
const uint8_t *buf, size_t len)
{
NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
@@ -92,7 +92,7 @@ static ssize_t net_hub_port_receive(VLANClientState *nc,
return net_hub_receive(port->hub, port, buf, len);
}
-static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
+static ssize_t net_hub_port_receive_iov(NetClientState *nc,
const struct iovec *iov, int iovcnt)
{
NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
@@ -100,7 +100,7 @@ static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
return net_hub_receive_iov(port->hub, port, iov, iovcnt);
}
-static void net_hub_port_cleanup(VLANClientState *nc)
+static void net_hub_port_cleanup(NetClientState *nc)
{
NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
@@ -117,7 +117,7 @@ static NetClientInfo net_hub_port_info = {
static NetHubPort *net_hub_port_new(NetHub *hub)
{
- VLANClientState *nc;
+ NetClientState *nc;
NetHubPort *port;
unsigned int id = hub->num_ports++;
char name[128];
@@ -139,7 +139,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
*
* If there is no existing hub with the given id then a new hub is created.
*/
-VLANClientState *net_hub_add_port(unsigned int hub_id)
+NetClientState *net_hub_add_port(unsigned int hub_id)
{
NetHub *hub;
NetHubPort *port;
@@ -161,12 +161,12 @@ VLANClientState *net_hub_add_port(unsigned int hub_id)
/**
* Find a specific client on a hub
*/
-VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
- const char *name)
+NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
+ const char *name)
{
NetHub *hub;
NetHubPort *port;
- VLANClientState *peer;
+ NetClientState *peer;
QLIST_FOREACH(hub, &hubs, next) {
if (hub->id == hub_id) {
@@ -204,7 +204,7 @@ void net_hub_info(Monitor *mon)
*
* @id Pointer for hub id output, may be NULL
*/
-int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
+int net_hub_id_for_client(NetClientState *nc, unsigned int *id)
{
NetHub *hub;
NetHubPort *port;
@@ -230,7 +230,7 @@ void net_hub_check_clients(void)
{
NetHub *hub;
NetHubPort *port;
- VLANClientState *peer;
+ NetClientState *peer;
QLIST_FOREACH(hub, &hubs, next) {
int has_nic = 0, has_host_dev = 0;
diff --git a/net/hub.h b/net/hub.h
index caa3b16..d04f1b1 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -16,11 +16,11 @@
#include "qemu-common.h"
-VLANClientState *net_hub_add_port(unsigned int hub_id);
-VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
- const char *name);
+NetClientState *net_hub_add_port(unsigned int hub_id);
+NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
+ const char *name);
void net_hub_info(Monitor *mon);
-int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
void net_hub_check_clients(void);
#endif /* NET_HUB_H */
diff --git a/net/queue.c b/net/queue.c
index 1ab5247..35c3463 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -40,7 +40,7 @@
struct NetPacket {
QTAILQ_ENTRY(NetPacket) entry;
- VLANClientState *sender;
+ NetClientState *sender;
unsigned flags;
int size;
NetPacketSent *sent_cb;
@@ -89,7 +89,7 @@ void qemu_del_net_queue(NetQueue *queue)
}
static ssize_t qemu_net_queue_append(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const uint8_t *buf,
size_t size,
@@ -110,7 +110,7 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
}
static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
@@ -143,7 +143,7 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
}
static ssize_t qemu_net_queue_deliver(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const uint8_t *data,
size_t size)
@@ -158,7 +158,7 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
}
static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt)
@@ -173,7 +173,7 @@ static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
}
ssize_t qemu_net_queue_send(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const uint8_t *data,
size_t size,
@@ -197,7 +197,7 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
}
ssize_t qemu_net_queue_send_iov(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
@@ -220,7 +220,7 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
return ret;
}
-void qemu_net_queue_purge(NetQueue *queue, VLANClientState *from)
+void qemu_net_queue_purge(NetQueue *queue, NetClientState *from)
{
NetPacket *packet, *next;
diff --git a/net/queue.h b/net/queue.h
index a31958e..d8eac0b 100644
--- a/net/queue.h
+++ b/net/queue.h
@@ -29,15 +29,15 @@
typedef struct NetPacket NetPacket;
typedef struct NetQueue NetQueue;
-typedef void (NetPacketSent) (VLANClientState *sender, ssize_t ret);
+typedef void (NetPacketSent) (NetClientState *sender, ssize_t ret);
-typedef ssize_t (NetPacketDeliver) (VLANClientState *sender,
+typedef ssize_t (NetPacketDeliver) (NetClientState *sender,
unsigned flags,
const uint8_t *buf,
size_t size,
void *opaque);
-typedef ssize_t (NetPacketDeliverIOV) (VLANClientState *sender,
+typedef ssize_t (NetPacketDeliverIOV) (NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
@@ -52,20 +52,20 @@ NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
void qemu_del_net_queue(NetQueue *queue);
ssize_t qemu_net_queue_send(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const uint8_t *data,
size_t size,
NetPacketSent *sent_cb);
ssize_t qemu_net_queue_send_iov(NetQueue *queue,
- VLANClientState *sender,
+ NetClientState *sender,
unsigned flags,
const struct iovec *iov,
int iovcnt,
NetPacketSent *sent_cb);
-void qemu_net_queue_purge(NetQueue *queue, VLANClientState *from);
+void qemu_net_queue_purge(NetQueue *queue, NetClientState *from);
void qemu_net_queue_flush(NetQueue *queue);
#endif /* QEMU_NET_QUEUE_H */
diff --git a/net/slirp.c b/net/slirp.c
index 5ed7036..2014774 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -67,7 +67,7 @@ struct slirp_config_str {
};
typedef struct SlirpState {
- VLANClientState nc;
+ NetClientState nc;
QTAILQ_ENTRY(SlirpState) entry;
Slirp *slirp;
#ifndef _WIN32
@@ -110,7 +110,7 @@ void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
qemu_send_packet(&s->nc, pkt, pkt_len);
}
-static ssize_t net_slirp_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_slirp_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
SlirpState *s = DO_UPCAST(SlirpState, nc, nc);
@@ -119,7 +119,7 @@ static ssize_t net_slirp_receive(VLANClientState *nc, const uint8_t *buf, size_t
return size;
}
-static void net_slirp_cleanup(VLANClientState *nc)
+static void net_slirp_cleanup(NetClientState *nc)
{
SlirpState *s = DO_UPCAST(SlirpState, nc, nc);
@@ -135,7 +135,7 @@ static NetClientInfo net_slirp_info = {
.cleanup = net_slirp_cleanup,
};
-static int net_slirp_init(VLANClientState *peer, const char *model,
+static int net_slirp_init(NetClientState *peer, const char *model,
const char *name, int restricted,
const char *vnetwork, const char *vhost,
const char *vhostname, const char *tftp_export,
@@ -152,7 +152,7 @@ static int net_slirp_init(VLANClientState *peer, const char *model,
#ifndef _WIN32
struct in_addr smbsrv = { .s_addr = 0 };
#endif
- VLANClientState *nc;
+ NetClientState *nc;
SlirpState *s;
char buf[20];
uint32_t addr;
@@ -283,7 +283,7 @@ static SlirpState *slirp_lookup(Monitor *mon, const char *vlan,
{
if (vlan) {
- VLANClientState *nc;
+ NetClientState *nc;
nc = net_hub_find_client_by_name(strtol(vlan, NULL, 0), stack);
if (!nc) {
return NULL;
@@ -680,7 +680,7 @@ static int net_init_slirp_configs(const char *name, const char *value, void *opa
int net_init_slirp(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
struct slirp_config_str *config;
const char *vhost;
diff --git a/net/slirp.h b/net/slirp.h
index 32041cb..e6000af 100644
--- a/net/slirp.h
+++ b/net/slirp.h
@@ -33,7 +33,7 @@
int net_init_slirp(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANClientState *peer);
+ NetClientState *peer);
void net_slirp_hostfwd_add(Monitor *mon, const QDict *qdict);
void net_slirp_hostfwd_remove(Monitor *mon, const QDict *qdict);
diff --git a/net/socket.c b/net/socket.c
index 5676bd5..55d9820 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -33,7 +33,7 @@
#include "qemu_socket.h"
typedef struct NetSocketState {
- VLANClientState nc;
+ NetClientState nc;
int fd;
int state; /* 0 = getting length, 1 = getting data */
unsigned int index;
@@ -43,14 +43,14 @@ typedef struct NetSocketState {
} NetSocketState;
typedef struct NetSocketListenState {
- VLANClientState *peer;
+ NetClientState *peer;
char *model;
char *name;
int fd;
} NetSocketListenState;
/* XXX: we consider we can send the whole packet without blocking */
-static ssize_t net_socket_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_socket_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
uint32_t len;
@@ -60,7 +60,7 @@ static ssize_t net_socket_receive(VLANClientState *nc, const uint8_t *buf, size_
return send_all(s->fd, buf, size);
}
-static ssize_t net_socket_receive_dgram(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_socket_receive_dgram(NetClientState *nc, const uint8_t *buf, size_t size)
{
NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
@@ -230,7 +230,7 @@ fail:
return -1;
}
-static void net_socket_cleanup(VLANClientState *nc)
+static void net_socket_cleanup(NetClientState *nc)
{
NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
@@ -244,7 +244,7 @@ static NetClientInfo net_dgram_socket_info = {
.cleanup = net_socket_cleanup,
};
-static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
const char *model,
const char *name,
int fd, int is_connected)
@@ -252,7 +252,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
struct sockaddr_in saddr;
int newfd;
socklen_t saddr_len;
- VLANClientState *nc;
+ NetClientState *nc;
NetSocketState *s;
/* fd passed: multicast: "learn" dgram_dst address from bound address and save it
@@ -322,12 +322,12 @@ static NetClientInfo net_socket_info = {
.cleanup = net_socket_cleanup,
};
-static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
const char *model,
const char *name,
int fd, int is_connected)
{
- VLANClientState *nc;
+ NetClientState *nc;
NetSocketState *s;
nc = qemu_new_net_client(&net_socket_info, peer, model, name);
@@ -346,7 +346,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
return s;
}
-static NetSocketState *net_socket_fd_init(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init(NetClientState *peer,
const char *model, const char *name,
int fd, int is_connected)
{
@@ -399,7 +399,7 @@ static void net_socket_accept(void *opaque)
}
}
-static int net_socket_listen_init(VLANClientState *peer,
+static int net_socket_listen_init(NetClientState *peer,
const char *model,
const char *name,
const char *host_str)
@@ -447,7 +447,7 @@ static int net_socket_listen_init(VLANClientState *peer,
return 0;
}
-static int net_socket_connect_init(VLANClientState *peer,
+static int net_socket_connect_init(NetClientState *peer,
const char *model,
const char *name,
const char *host_str)
@@ -497,7 +497,7 @@ static int net_socket_connect_init(VLANClientState *peer,
return 0;
}
-static int net_socket_mcast_init(VLANClientState *peer,
+static int net_socket_mcast_init(NetClientState *peer,
const char *model,
const char *name,
const char *host_str,
@@ -590,7 +590,7 @@ static int net_socket_udp_init(NetClientState *peer,
int net_init_socket(QemuOpts *opts,
Monitor *mon,
const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
if (qemu_opt_get(opts, "fd")) {
int fd;
diff --git a/net/socket.h b/net/socket.h
index f6172bc..5edf17c 100644
--- a/net/socket.h
+++ b/net/socket.h
@@ -28,6 +28,6 @@
#include "qemu-common.h"
int net_init_socket(QemuOpts *opts, Monitor *mon,
- const char *name, VLANClientState *peer);
+ const char *name, NetClientState *peer);
#endif /* QEMU_NET_SOCKET_H */
diff --git a/net/tap-win32.c b/net/tap-win32.c
index c1f90c7..68243bb 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -630,11 +630,11 @@ static int tap_win32_open(tap_win32_overlapped_t **phandle,
/********************************************/
typedef struct TAPState {
- VLANClientState nc;
+ NetClientState nc;
tap_win32_overlapped_t *handle;
} TAPState;
-static void tap_cleanup(VLANClientState *nc)
+static void tap_cleanup(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -645,7 +645,7 @@ static void tap_cleanup(VLANClientState *nc)
*/
}
-static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -673,10 +673,10 @@ static NetClientInfo net_tap_win32_info = {
.cleanup = tap_cleanup,
};
-static int tap_win32_init(VLANClientState *peer, const char *model,
+static int tap_win32_init(NetClientState *peer, const char *model,
const char *name, const char *ifname)
{
- VLANClientState *nc;
+ NetClientState *nc;
TAPState *s;
tap_win32_overlapped_t *handle;
@@ -700,7 +700,7 @@ static int tap_win32_init(VLANClientState *peer, const char *model,
}
int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
const char *ifname;
@@ -718,12 +718,12 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
return 0;
}
-int tap_has_ufo(VLANClientState *vc)
+int tap_has_ufo(NetClientState *vc)
{
return 0;
}
-int tap_has_vnet_hdr(VLANClientState *vc)
+int tap_has_vnet_hdr(NetClientState *vc)
{
return 0;
}
@@ -737,16 +737,16 @@ void tap_fd_set_vnet_hdr_len(int fd, int len)
{
}
-void tap_using_vnet_hdr(VLANClientState *vc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr)
{
}
-void tap_set_offload(VLANClientState *vc, int csum, int tso4,
+void tap_set_offload(NetClientState *vc, int csum, int tso4,
int tso6, int ecn, int ufo)
{
}
-struct vhost_net *tap_get_vhost_net(VLANClientState *nc)
+struct vhost_net *tap_get_vhost_net(NetClientState *nc)
{
return NULL;
}
diff --git a/net/tap.c b/net/tap.c
index 7dbf643..65f45b8 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -49,7 +49,7 @@
#define TAP_BUFSIZE (4096 + 65536)
typedef struct TAPState {
- VLANClientState nc;
+ NetClientState nc;
int fd;
char down_script[1024];
char down_script_arg[128];
@@ -114,7 +114,7 @@ static ssize_t tap_write_packet(TAPState *s, const struct iovec *iov, int iovcnt
return len;
}
-static ssize_t tap_receive_iov(VLANClientState *nc, const struct iovec *iov,
+static ssize_t tap_receive_iov(NetClientState *nc, const struct iovec *iov,
int iovcnt)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -133,7 +133,7 @@ static ssize_t tap_receive_iov(VLANClientState *nc, const struct iovec *iov,
return tap_write_packet(s, iovp, iovcnt);
}
-static ssize_t tap_receive_raw(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive_raw(NetClientState *nc, const uint8_t *buf, size_t size)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
struct iovec iov[2];
@@ -153,7 +153,7 @@ static ssize_t tap_receive_raw(VLANClientState *nc, const uint8_t *buf, size_t s
return tap_write_packet(s, iov, iovcnt);
}
-static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
struct iovec iov[1];
@@ -182,7 +182,7 @@ ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen)
}
#endif
-static void tap_send_completed(VLANClientState *nc, ssize_t len)
+static void tap_send_completed(NetClientState *nc, ssize_t len)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
tap_read_poll(s, 1);
@@ -213,7 +213,7 @@ static void tap_send(void *opaque)
} while (size > 0 && qemu_can_send_packet(&s->nc));
}
-int tap_has_ufo(VLANClientState *nc)
+int tap_has_ufo(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -222,7 +222,7 @@ int tap_has_ufo(VLANClientState *nc)
return s->has_ufo;
}
-int tap_has_vnet_hdr(VLANClientState *nc)
+int tap_has_vnet_hdr(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -231,7 +231,7 @@ int tap_has_vnet_hdr(VLANClientState *nc)
return !!s->host_vnet_hdr_len;
}
-int tap_has_vnet_hdr_len(VLANClientState *nc, int len)
+int tap_has_vnet_hdr_len(NetClientState *nc, int len)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -240,7 +240,7 @@ int tap_has_vnet_hdr_len(VLANClientState *nc, int len)
return tap_probe_vnet_hdr_len(s->fd, len);
}
-void tap_set_vnet_hdr_len(VLANClientState *nc, int len)
+void tap_set_vnet_hdr_len(NetClientState *nc, int len)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -252,7 +252,7 @@ void tap_set_vnet_hdr_len(VLANClientState *nc, int len)
s->host_vnet_hdr_len = len;
}
-void tap_using_vnet_hdr(VLANClientState *nc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -264,7 +264,7 @@ void tap_using_vnet_hdr(VLANClientState *nc, int using_vnet_hdr)
s->using_vnet_hdr = using_vnet_hdr;
}
-void tap_set_offload(VLANClientState *nc, int csum, int tso4,
+void tap_set_offload(NetClientState *nc, int csum, int tso4,
int tso6, int ecn, int ufo)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -275,7 +275,7 @@ void tap_set_offload(VLANClientState *nc, int csum, int tso4,
tap_fd_set_offload(s->fd, csum, tso4, tso6, ecn, ufo);
}
-static void tap_cleanup(VLANClientState *nc)
+static void tap_cleanup(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -295,14 +295,14 @@ static void tap_cleanup(VLANClientState *nc)
s->fd = -1;
}
-static void tap_poll(VLANClientState *nc, bool enable)
+static void tap_poll(NetClientState *nc, bool enable)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
tap_read_poll(s, enable);
tap_write_poll(s, enable);
}
-int tap_get_fd(VLANClientState *nc)
+int tap_get_fd(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
assert(nc->info->type == NET_CLIENT_TYPE_TAP);
@@ -321,13 +321,13 @@ static NetClientInfo net_tap_info = {
.cleanup = tap_cleanup,
};
-static TAPState *net_tap_fd_init(VLANClientState *peer,
+static TAPState *net_tap_fd_init(NetClientState *peer,
const char *model,
const char *name,
int fd,
int vnet_hdr)
{
- VLANClientState *nc;
+ NetClientState *nc;
TAPState *s;
nc = qemu_new_net_client(&net_tap_info, peer, model, name);
@@ -584,7 +584,7 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
}
int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
TAPState *s;
int fd, vnet_hdr = 0;
@@ -709,7 +709,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
return 0;
}
-VHostNetState *tap_get_vhost_net(VLANClientState *nc)
+VHostNetState *tap_get_vhost_net(NetClientState *nc)
{
TAPState *s = DO_UPCAST(TAPState, nc, nc);
assert(nc->info->type == NET_CLIENT_TYPE_TAP);
diff --git a/net/tap.h b/net/tap.h
index 8d949cd..cf21d68 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -33,18 +33,18 @@
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer);
+ NetClientState *peer);
int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required);
ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen);
-int tap_has_ufo(VLANClientState *vc);
-int tap_has_vnet_hdr(VLANClientState *vc);
-int tap_has_vnet_hdr_len(VLANClientState *vc, int len);
-void tap_using_vnet_hdr(VLANClientState *vc, int using_vnet_hdr);
-void tap_set_offload(VLANClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
-void tap_set_vnet_hdr_len(VLANClientState *vc, int len);
+int tap_has_ufo(NetClientState *vc);
+int tap_has_vnet_hdr(NetClientState *vc);
+int tap_has_vnet_hdr_len(NetClientState *vc, int len);
+void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr);
+void tap_set_offload(NetClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
+void tap_set_vnet_hdr_len(NetClientState *vc, int len);
int tap_set_sndbuf(int fd, QemuOpts *opts);
int tap_probe_vnet_hdr(int fd);
@@ -53,10 +53,10 @@ int tap_probe_has_ufo(int fd);
void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
void tap_fd_set_vnet_hdr_len(int fd, int len);
-int tap_get_fd(VLANClientState *vc);
+int tap_get_fd(NetClientState *vc);
struct vhost_net;
-struct vhost_net *tap_get_vhost_net(VLANClientState *vc);
+struct vhost_net *tap_get_vhost_net(NetClientState *vc);
int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
NetClientState *peer);
diff --git a/net/vde.c b/net/vde.c
index 24d12d4..8d9e1c6 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -33,7 +33,7 @@
#include "qemu-option.h"
typedef struct VDEState {
- VLANClientState nc;
+ NetClientState nc;
VDECONN *vde;
} VDEState;
@@ -49,7 +49,7 @@ static void vde_to_qemu(void *opaque)
}
}
-static ssize_t vde_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t vde_receive(NetClientState *nc, const uint8_t *buf, size_t size)
{
VDEState *s = DO_UPCAST(VDEState, nc, nc);
ssize_t ret;
@@ -61,7 +61,7 @@ static ssize_t vde_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
return ret;
}
-static void vde_cleanup(VLANClientState *nc)
+static void vde_cleanup(NetClientState *nc)
{
VDEState *s = DO_UPCAST(VDEState, nc, nc);
qemu_set_fd_handler(vde_datafd(s->vde), NULL, NULL, NULL);
@@ -75,11 +75,11 @@ static NetClientInfo net_vde_info = {
.cleanup = vde_cleanup,
};
-static int net_vde_init(VLANClientState *peer, const char *model,
+static int net_vde_init(NetClientState *peer, const char *model,
const char *name, const char *sock,
int port, const char *group, int mode)
{
- VLANClientState *nc;
+ NetClientState *nc;
VDEState *s;
VDECONN *vde;
char *init_group = (char *)group;
@@ -111,7 +111,7 @@ static int net_vde_init(VLANClientState *peer, const char *model,
}
int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer)
+ NetClientState *peer)
{
const char *sock;
const char *group;
diff --git a/net/vde.h b/net/vde.h
index 69c4e92..276e1ff 100644
--- a/net/vde.h
+++ b/net/vde.h
@@ -30,7 +30,7 @@
#ifdef CONFIG_VDE
int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
- VLANClientState *peer);
+ NetClientState *peer);
#endif /* CONFIG_VDE */
diff --git a/qemu-common.h b/qemu-common.h
index 9443c7a..cb0286d 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -235,7 +235,7 @@ typedef struct TextConsole TextConsole;
typedef TextConsole QEMUConsole;
typedef struct CharDriverState CharDriverState;
typedef struct MACAddr MACAddr;
-typedef struct VLANClientState VLANClientState;
+typedef struct NetClientState NetClientState;
typedef struct i2c_bus i2c_bus;
typedef struct ISABus ISABus;
typedef struct SMBusDevice SMBusDevice;
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 11/16] net: Rename vc local variables to nc
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (9 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
` (5 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Now that VLANClientState has been renamed to NetClientState all 'vc'
local variables should be 'nc'. Much of the code already used 'nc' but
there are places where 'vc' needs to be renamed.
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
hw/ne2000.h | 4 +-
hw/vhost_net.c | 18 +++---
net.c | 214 +++++++++++++++++++++++++++---------------------------
net.h | 20 +++---
net/tap-win32.c | 8 +-
net/tap.h | 16 ++--
6 files changed, 140 insertions(+), 140 deletions(-)
diff --git a/hw/ne2000.h b/hw/ne2000.h
index 6c196a2..1e7ab07 100644
--- a/hw/ne2000.h
+++ b/hw/ne2000.h
@@ -31,5 +31,5 @@ typedef struct NE2000State {
void ne2000_setup_io(NE2000State *s, unsigned size);
extern const VMStateDescription vmstate_ne2000;
void ne2000_reset(NE2000State *s);
-int ne2000_can_receive(NetClientState *vc);
-ssize_t ne2000_receive(NetClientState *vc, const uint8_t *buf, size_t size_);
+int ne2000_can_receive(NetClientState *nc);
+ssize_t ne2000_receive(NetClientState *nc, const uint8_t *buf, size_t size_);
diff --git a/hw/vhost_net.c b/hw/vhost_net.c
index c3e6546..c2d90df 100644
--- a/hw/vhost_net.c
+++ b/hw/vhost_net.c
@@ -42,7 +42,7 @@ struct vhost_net {
struct vhost_dev dev;
struct vhost_virtqueue vqs[2];
int backend;
- NetClientState *vc;
+ NetClientState *nc;
};
unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
@@ -104,7 +104,7 @@ struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
if (r < 0) {
goto fail;
}
- net->vc = backend;
+ net->nc = backend;
net->dev.backend_features = tap_has_vnet_hdr(backend) ? 0 :
(1 << VHOST_NET_F_VIRTIO_NET_HDR);
net->backend = r;
@@ -151,7 +151,7 @@ int vhost_net_start(struct vhost_net *net,
goto fail_notifiers;
}
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
- tap_set_vnet_hdr_len(net->vc,
+ tap_set_vnet_hdr_len(net->nc,
sizeof(struct virtio_net_hdr_mrg_rxbuf));
}
@@ -160,7 +160,7 @@ int vhost_net_start(struct vhost_net *net,
goto fail_start;
}
- net->vc->info->poll(net->vc, false);
+ net->nc->info->poll(net->nc, false);
qemu_set_fd_handler(net->backend, NULL, NULL, NULL);
file.fd = net->backend;
for (file.index = 0; file.index < net->dev.nvqs; ++file.index) {
@@ -177,10 +177,10 @@ fail:
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
assert(r >= 0);
}
- net->vc->info->poll(net->vc, true);
+ net->nc->info->poll(net->nc, true);
vhost_dev_stop(&net->dev, dev);
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
- tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+ tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
}
fail_start:
vhost_dev_disable_notifiers(&net->dev, dev);
@@ -197,10 +197,10 @@ void vhost_net_stop(struct vhost_net *net,
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
assert(r >= 0);
}
- net->vc->info->poll(net->vc, true);
+ net->nc->info->poll(net->nc, true);
vhost_dev_stop(&net->dev, dev);
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
- tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+ tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
}
vhost_dev_disable_notifiers(&net->dev, dev);
}
@@ -209,7 +209,7 @@ void vhost_net_cleanup(struct vhost_net *net)
{
vhost_dev_cleanup(&net->dev);
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
- tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+ tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
}
g_free(net);
}
diff --git a/net.c b/net.c
index de18c76..10fb601 100644
--- a/net.c
+++ b/net.c
@@ -129,11 +129,11 @@ int parse_host_port(struct sockaddr_in *saddr, const char *str)
return 0;
}
-void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6])
+void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6])
{
- snprintf(vc->info_str, sizeof(vc->info_str),
+ snprintf(nc->info_str, sizeof(nc->info_str),
"model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
- vc->model,
+ nc->model,
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
}
@@ -159,19 +159,19 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
* Only net clients created with the legacy -net option need this. Naming is
* mandatory for net clients created with -netdev.
*/
-static char *assign_name(NetClientState *vc1, const char *model)
+static char *assign_name(NetClientState *nc1, const char *model)
{
- NetClientState *vc;
+ NetClientState *nc;
char buf[256];
int id = 0;
- QTAILQ_FOREACH(vc, &net_clients, next) {
- if (vc == vc1) {
+ QTAILQ_FOREACH(nc, &net_clients, next) {
+ if (nc == nc1) {
continue;
}
/* For compatibility only bump id for net clients on a vlan */
- if (strcmp(vc->model, model) == 0 &&
- net_hub_id_for_client(vc, NULL) == 0) {
+ if (strcmp(nc->model, model) == 0 &&
+ net_hub_id_for_client(nc, NULL) == 0) {
id++;
}
}
@@ -197,32 +197,32 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
const char *model,
const char *name)
{
- NetClientState *vc;
+ NetClientState *nc;
assert(info->size >= sizeof(NetClientState));
- vc = g_malloc0(info->size);
+ nc = g_malloc0(info->size);
- vc->info = info;
- vc->model = g_strdup(model);
+ nc->info = info;
+ nc->model = g_strdup(model);
if (name) {
- vc->name = g_strdup(name);
+ nc->name = g_strdup(name);
} else {
- vc->name = assign_name(vc, model);
+ nc->name = assign_name(nc, model);
}
if (peer) {
assert(!peer->peer);
- vc->peer = peer;
- peer->peer = vc;
+ nc->peer = peer;
+ peer->peer = nc;
}
- QTAILQ_INSERT_TAIL(&net_clients, vc, next);
+ QTAILQ_INSERT_TAIL(&net_clients, nc, next);
- vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
+ nc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
qemu_deliver_packet_iov,
- vc);
+ nc);
- return vc;
+ return nc;
}
NICState *qemu_new_nic(NetClientInfo *info,
@@ -246,56 +246,56 @@ NICState *qemu_new_nic(NetClientInfo *info,
return nic;
}
-static void qemu_cleanup_vlan_client(NetClientState *vc)
+static void qemu_cleanup_vlan_client(NetClientState *nc)
{
- QTAILQ_REMOVE(&net_clients, vc, next);
+ QTAILQ_REMOVE(&net_clients, nc, next);
- if (vc->info->cleanup) {
- vc->info->cleanup(vc);
+ if (nc->info->cleanup) {
+ nc->info->cleanup(nc);
}
}
-static void qemu_free_vlan_client(NetClientState *vc)
+static void qemu_free_vlan_client(NetClientState *nc)
{
- if (vc->send_queue) {
- qemu_del_net_queue(vc->send_queue);
+ if (nc->send_queue) {
+ qemu_del_net_queue(nc->send_queue);
}
- if (vc->peer) {
- vc->peer->peer = NULL;
+ if (nc->peer) {
+ nc->peer->peer = NULL;
}
- g_free(vc->name);
- g_free(vc->model);
- g_free(vc);
+ g_free(nc->name);
+ g_free(nc->model);
+ g_free(nc);
}
-void qemu_del_vlan_client(NetClientState *vc)
+void qemu_del_vlan_client(NetClientState *nc)
{
/* If there is a peer NIC, delete and cleanup client, but do not free. */
- if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
- NICState *nic = DO_UPCAST(NICState, nc, vc->peer);
+ if (nc->peer && nc->peer->info->type == NET_CLIENT_TYPE_NIC) {
+ NICState *nic = DO_UPCAST(NICState, nc, nc->peer);
if (nic->peer_deleted) {
return;
}
nic->peer_deleted = true;
/* Let NIC know peer is gone. */
- vc->peer->link_down = true;
- if (vc->peer->info->link_status_changed) {
- vc->peer->info->link_status_changed(vc->peer);
+ nc->peer->link_down = true;
+ if (nc->peer->info->link_status_changed) {
+ nc->peer->info->link_status_changed(nc->peer);
}
- qemu_cleanup_vlan_client(vc);
+ qemu_cleanup_vlan_client(nc);
return;
}
/* If this is a peer NIC and peer has already been deleted, free it now. */
- if (vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
- NICState *nic = DO_UPCAST(NICState, nc, vc);
+ if (nc->peer && nc->info->type == NET_CLIENT_TYPE_NIC) {
+ NICState *nic = DO_UPCAST(NICState, nc, nc);
if (nic->peer_deleted) {
- qemu_free_vlan_client(vc->peer);
+ qemu_free_vlan_client(nc->peer);
}
}
- qemu_cleanup_vlan_client(vc);
- qemu_free_vlan_client(vc);
+ qemu_cleanup_vlan_client(nc);
+ qemu_free_vlan_client(nc);
}
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
@@ -330,44 +330,44 @@ static ssize_t qemu_deliver_packet(NetClientState *sender,
size_t size,
void *opaque)
{
- NetClientState *vc = opaque;
+ NetClientState *nc = opaque;
ssize_t ret;
- if (vc->link_down) {
+ if (nc->link_down) {
return size;
}
- if (vc->receive_disabled) {
+ if (nc->receive_disabled) {
return 0;
}
- if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) {
- ret = vc->info->receive_raw(vc, data, size);
+ if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
+ ret = nc->info->receive_raw(nc, data, size);
} else {
- ret = vc->info->receive(vc, data, size);
+ ret = nc->info->receive(nc, data, size);
}
if (ret == 0) {
- vc->receive_disabled = 1;
+ nc->receive_disabled = 1;
};
return ret;
}
-void qemu_purge_queued_packets(NetClientState *vc)
+void qemu_purge_queued_packets(NetClientState *nc)
{
- if (!vc->peer) {
+ if (!nc->peer) {
return;
}
- qemu_net_queue_purge(vc->peer->send_queue, vc);
+ qemu_net_queue_purge(nc->peer->send_queue, nc);
}
-void qemu_flush_queued_packets(NetClientState *vc)
+void qemu_flush_queued_packets(NetClientState *nc)
{
- vc->receive_disabled = 0;
+ nc->receive_disabled = 0;
- qemu_net_queue_flush(vc->send_queue);
+ qemu_net_queue_flush(nc->send_queue);
}
static ssize_t qemu_send_packet_async_with_flags(NetClientState *sender,
@@ -399,18 +399,18 @@ ssize_t qemu_send_packet_async(NetClientState *sender,
buf, size, sent_cb);
}
-void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size)
+void qemu_send_packet(NetClientState *nc, const uint8_t *buf, int size)
{
- qemu_send_packet_async(vc, buf, size, NULL);
+ qemu_send_packet_async(nc, buf, size, NULL);
}
-ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size)
+ssize_t qemu_send_packet_raw(NetClientState *nc, const uint8_t *buf, int size)
{
- return qemu_send_packet_async_with_flags(vc, QEMU_NET_PACKET_FLAG_RAW,
+ return qemu_send_packet_async_with_flags(nc, QEMU_NET_PACKET_FLAG_RAW,
buf, size, NULL);
}
-static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
+static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
int iovcnt)
{
uint8_t buffer[4096];
@@ -418,7 +418,7 @@ static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
offset = iov_to_buf(iov, iovcnt, buffer, 0, sizeof(buffer));
- return vc->info->receive(vc, buffer, offset);
+ return nc->info->receive(nc, buffer, offset);
}
static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
@@ -427,16 +427,16 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
int iovcnt,
void *opaque)
{
- NetClientState *vc = opaque;
+ NetClientState *nc = opaque;
- if (vc->link_down) {
+ if (nc->link_down) {
return iov_size(iov, iovcnt);
}
- if (vc->info->receive_iov) {
- return vc->info->receive_iov(vc, iov, iovcnt);
+ if (nc->info->receive_iov) {
+ return nc->info->receive_iov(nc, iov, iovcnt);
} else {
- return vc_sendv_compat(vc, iov, iovcnt);
+ return nc_sendv_compat(nc, iov, iovcnt);
}
}
@@ -458,20 +458,20 @@ ssize_t qemu_sendv_packet_async(NetClientState *sender,
}
ssize_t
-qemu_sendv_packet(NetClientState *vc, const struct iovec *iov, int iovcnt)
+qemu_sendv_packet(NetClientState *nc, const struct iovec *iov, int iovcnt)
{
- return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
+ return qemu_sendv_packet_async(nc, iov, iovcnt, NULL);
}
NetClientState *qemu_find_netdev(const char *id)
{
- NetClientState *vc;
+ NetClientState *nc;
- QTAILQ_FOREACH(vc, &net_clients, next) {
- if (vc->info->type == NET_CLIENT_TYPE_NIC)
+ QTAILQ_FOREACH(nc, &net_clients, next) {
+ if (nc->info->type == NET_CLIENT_TYPE_NIC)
continue;
- if (!strcmp(vc->name, id)) {
- return vc;
+ if (!strcmp(nc->name, id)) {
+ return nc;
}
}
@@ -1020,19 +1020,19 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
void net_host_device_remove(Monitor *mon, const QDict *qdict)
{
- NetClientState *vc;
+ NetClientState *nc;
int vlan_id = qdict_get_int(qdict, "vlan_id");
const char *device = qdict_get_str(qdict, "device");
- vc = net_hub_find_client_by_name(vlan_id, device);
- if (!vc) {
+ nc = net_hub_find_client_by_name(vlan_id, device);
+ if (!nc) {
return;
}
- if (!net_host_check_device(vc->model)) {
+ if (!net_host_check_device(nc->model)) {
monitor_printf(mon, "invalid host network device %s\n", device);
return;
}
- qemu_del_vlan_client(vc);
+ qemu_del_vlan_client(nc);
}
int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
@@ -1056,14 +1056,14 @@ int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
const char *id = qdict_get_str(qdict, "id");
- NetClientState *vc;
+ NetClientState *nc;
- vc = qemu_find_netdev(id);
- if (!vc) {
+ nc = qemu_find_netdev(id);
+ if (!nc) {
qerror_report(QERR_DEVICE_NOT_FOUND, id);
return -1;
}
- qemu_del_vlan_client(vc);
+ qemu_del_vlan_client(nc);
qemu_opts_del(qemu_opts_find(qemu_find_opts("netdev"), id));
return 0;
}
@@ -1076,16 +1076,16 @@ static void print_net_client(Monitor *mon, NetClientState *vc)
void do_info_network(Monitor *mon)
{
- NetClientState *vc, *peer;
+ NetClientState *nc, *peer;
net_client_type type;
monitor_printf(mon, "Devices not on any VLAN:\n");
- QTAILQ_FOREACH(vc, &net_clients, next) {
- peer = vc->peer;
- type = vc->info->type;
+ QTAILQ_FOREACH(nc, &net_clients, next) {
+ peer = nc->peer;
+ type = nc->info->type;
if (!peer || type == NET_CLIENT_TYPE_NIC) {
monitor_printf(mon, " ");
- print_net_client(mon, vc);
+ print_net_client(mon, nc);
} /* else it's a netdev connected to a NIC, printed with the NIC */
if (peer && type == NET_CLIENT_TYPE_NIC) {
monitor_printf(mon, " \\ ");
@@ -1097,23 +1097,23 @@ void do_info_network(Monitor *mon)
void qmp_set_link(const char *name, bool up, Error **errp)
{
- VLANClientState *vc = NULL;
+ NetClientState *nc = NULL;
- QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
- if (!strcmp(vc->name, name)) {
+ QTAILQ_FOREACH(nc, &net_clients, next) {
+ if (!strcmp(nc->name, name)) {
goto done;
}
}
done:
- if (!vc) {
+ if (!nc) {
qerror_report(QERR_DEVICE_NOT_FOUND, name);
return;
}
- vc->link_down = !up;
+ nc->link_down = !up;
- if (vc->info->link_status_changed) {
- vc->info->link_status_changed(vc);
+ if (nc->info->link_status_changed) {
+ nc->info->link_status_changed(nc);
}
/* Notify peer. Don't update peer link status: this makes it possible to
@@ -1123,23 +1123,23 @@ done:
* Current behaviour is compatible with qemu vlans where there could be
* multiple clients that can still communicate with each other in
* disconnected mode. For now maintain this compatibility. */
- if (vc->peer && vc->peer->info->link_status_changed) {
- vc->peer->info->link_status_changed(vc->peer);
+ if (nc->peer && nc->peer->info->link_status_changed) {
+ nc->peer->info->link_status_changed(nc->peer);
}
}
void net_cleanup(void)
{
- NetClientState *vc, *next_vc;
+ NetClientState *nc, *next_vc;
- QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
- qemu_del_vlan_client(vc);
+ QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) {
+ qemu_del_vlan_client(nc);
}
}
void net_check_clients(void)
{
- NetClientState *vc;
+ NetClientState *nc;
int i;
/* Don't warn about the default network setup that you get if
@@ -1156,11 +1156,11 @@ void net_check_clients(void)
net_hub_check_clients();
- QTAILQ_FOREACH(vc, &net_clients, next) {
- if (!vc->peer) {
+ QTAILQ_FOREACH(nc, &net_clients, next) {
+ if (!nc->peer) {
fprintf(stderr, "Warning: %s %s has no peer\n",
- vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
- vc->name);
+ nc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
+ nc->name);
}
}
diff --git a/net.h b/net.h
index 4a91f41..f2fec6f 100644
--- a/net.h
+++ b/net.h
@@ -89,23 +89,23 @@ NICState *qemu_new_nic(NetClientInfo *info,
const char *model,
const char *name,
void *opaque);
-void qemu_del_vlan_client(NetClientState *vc);
+void qemu_del_vlan_client(NetClientState *nc);
NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
const char *client_str);
typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque);
-int qemu_can_send_packet(NetClientState *vc);
-ssize_t qemu_sendv_packet(NetClientState *vc, const struct iovec *iov,
+int qemu_can_send_packet(NetClientState *nc);
+ssize_t qemu_sendv_packet(NetClientState *nc, const struct iovec *iov,
int iovcnt);
-ssize_t qemu_sendv_packet_async(NetClientState *vc, const struct iovec *iov,
+ssize_t qemu_sendv_packet_async(NetClientState *nc, const struct iovec *iov,
int iovcnt, NetPacketSent *sent_cb);
-void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_async(NetClientState *vc, const uint8_t *buf,
+void qemu_send_packet(NetClientState *nc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_raw(NetClientState *nc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_async(NetClientState *nc, const uint8_t *buf,
int size, NetPacketSent *sent_cb);
-void qemu_purge_queued_packets(NetClientState *vc);
-void qemu_flush_queued_packets(NetClientState *vc);
-void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6]);
+void qemu_purge_queued_packets(NetClientState *nc);
+void qemu_flush_queued_packets(NetClientState *nc);
+void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6]);
void qemu_macaddr_default_if_unset(MACAddr *macaddr);
int qemu_show_nic_models(const char *arg, const char *const *models);
void qemu_check_nic_model(NICInfo *nd, const char *model);
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 68243bb..3406717 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -718,12 +718,12 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
return 0;
}
-int tap_has_ufo(NetClientState *vc)
+int tap_has_ufo(NetClientState *nc)
{
return 0;
}
-int tap_has_vnet_hdr(NetClientState *vc)
+int tap_has_vnet_hdr(NetClientState *nc)
{
return 0;
}
@@ -737,11 +737,11 @@ void tap_fd_set_vnet_hdr_len(int fd, int len)
{
}
-void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr)
{
}
-void tap_set_offload(NetClientState *vc, int csum, int tso4,
+void tap_set_offload(NetClientState *nc, int csum, int tso4,
int tso6, int ecn, int ufo)
{
}
diff --git a/net/tap.h b/net/tap.h
index cf21d68..0e35e81 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -39,12 +39,12 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required
ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen);
-int tap_has_ufo(NetClientState *vc);
-int tap_has_vnet_hdr(NetClientState *vc);
-int tap_has_vnet_hdr_len(NetClientState *vc, int len);
-void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr);
-void tap_set_offload(NetClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
-void tap_set_vnet_hdr_len(NetClientState *vc, int len);
+int tap_has_ufo(NetClientState *nc);
+int tap_has_vnet_hdr(NetClientState *nc);
+int tap_has_vnet_hdr_len(NetClientState *nc, int len);
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr);
+void tap_set_offload(NetClientState *nc, int csum, int tso4, int tso6, int ecn, int ufo);
+void tap_set_vnet_hdr_len(NetClientState *nc, int len);
int tap_set_sndbuf(int fd, QemuOpts *opts);
int tap_probe_vnet_hdr(int fd);
@@ -53,10 +53,10 @@ int tap_probe_has_ufo(int fd);
void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
void tap_fd_set_vnet_hdr_len(int fd, int len);
-int tap_get_fd(NetClientState *vc);
+int tap_get_fd(NetClientState *nc);
struct vhost_net;
-struct vhost_net *tap_get_vhost_net(NetClientState *vc);
+struct vhost_net *tap_get_vhost_net(NetClientState *nc);
int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
NetClientState *peer);
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client()
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (10 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 11/16] net: Rename vc local variables to nc zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info zwu.kernel
` (4 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Another step in moving the vlan feature out of net core. Users only
deal with NetClientState and therefore qemu_del_vlan_client() should be
named qemu_del_net_client().
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
hw/e1000.c | 2 +-
hw/eepro100.c | 2 +-
hw/ne2000.c | 2 +-
hw/pcnet-pci.c | 2 +-
hw/rtl8139.c | 2 +-
hw/usb/dev-network.c | 2 +-
hw/virtio-net.c | 2 +-
hw/xen_nic.c | 2 +-
net.c | 20 ++++++++++----------
net.h | 2 +-
net/slirp.c | 2 +-
11 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/hw/e1000.c b/hw/e1000.c
index 8c7fd3b..cf1e124 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1201,7 +1201,7 @@ pci_e1000_uninit(PCIDevice *dev)
qemu_free_timer(d->autoneg_timer);
memory_region_destroy(&d->mmio);
memory_region_destroy(&d->io);
- qemu_del_vlan_client(&d->nic->nc);
+ qemu_del_net_client(&d->nic->nc);
return 0;
}
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 5725ccf..0217795 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1840,7 +1840,7 @@ static int pci_nic_uninit(PCIDevice *pci_dev)
memory_region_destroy(&s->flash_bar);
vmstate_unregister(&pci_dev->qdev, s->vmstate, s);
eeprom93xx_free(&pci_dev->qdev, s->eeprom);
- qemu_del_vlan_client(&s->nic->nc);
+ qemu_del_net_client(&s->nic->nc);
return 0;
}
diff --git a/hw/ne2000.c b/hw/ne2000.c
index 2339725..e8b1d68 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -750,7 +750,7 @@ static int pci_ne2000_exit(PCIDevice *pci_dev)
NE2000State *s = &d->ne2000;
memory_region_destroy(&s->io);
- qemu_del_vlan_client(&s->nic->nc);
+ qemu_del_net_client(&s->nic->nc);
return 0;
}
diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c
index 8c82667..8bbad47 100644
--- a/hw/pcnet-pci.c
+++ b/hw/pcnet-pci.c
@@ -279,7 +279,7 @@ static int pci_pcnet_uninit(PCIDevice *dev)
memory_region_destroy(&d->io_bar);
qemu_del_timer(d->state.poll_timer);
qemu_free_timer(d->state.poll_timer);
- qemu_del_vlan_client(&d->state.nic->nc);
+ qemu_del_net_client(&d->state.nic->nc);
return 0;
}
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 1e4f4eb..3642fcb 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -3448,7 +3448,7 @@ static int pci_rtl8139_uninit(PCIDevice *dev)
}
qemu_del_timer(s->timer);
qemu_free_timer(s->timer);
- qemu_del_vlan_client(&s->nic->nc);
+ qemu_del_net_client(&s->nic->nc);
return 0;
}
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index 21e0069..4bd4243 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1309,7 +1309,7 @@ static void usb_net_handle_destroy(USBDevice *dev)
/* TODO: remove the nd_table[] entry */
rndis_clear_responsequeue(s);
- qemu_del_vlan_client(&s->nic->nc);
+ qemu_del_net_client(&s->nic->nc);
}
static NetClientInfo net_usbnet_info = {
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index a73c523..d5527d4 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -1077,6 +1077,6 @@ void virtio_net_exit(VirtIODevice *vdev)
qemu_bh_delete(n->tx_bh);
}
- qemu_del_vlan_client(&n->nic->nc);
+ qemu_del_net_client(&n->nic->nc);
virtio_cleanup(&n->vdev);
}
diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 6391a04..ba4a45c 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -409,7 +409,7 @@ static void net_disconnect(struct XenDevice *xendev)
netdev->rxs = NULL;
}
if (netdev->nic) {
- qemu_del_vlan_client(&netdev->nic->nc);
+ qemu_del_net_client(&netdev->nic->nc);
netdev->nic = NULL;
}
}
diff --git a/net.c b/net.c
index 10fb601..61dc28d 100644
--- a/net.c
+++ b/net.c
@@ -246,7 +246,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
return nic;
}
-static void qemu_cleanup_vlan_client(NetClientState *nc)
+static void qemu_cleanup_net_client(NetClientState *nc)
{
QTAILQ_REMOVE(&net_clients, nc, next);
@@ -255,7 +255,7 @@ static void qemu_cleanup_vlan_client(NetClientState *nc)
}
}
-static void qemu_free_vlan_client(NetClientState *nc)
+static void qemu_free_net_client(NetClientState *nc)
{
if (nc->send_queue) {
qemu_del_net_queue(nc->send_queue);
@@ -268,7 +268,7 @@ static void qemu_free_vlan_client(NetClientState *nc)
g_free(nc);
}
-void qemu_del_vlan_client(NetClientState *nc)
+void qemu_del_net_client(NetClientState *nc)
{
/* If there is a peer NIC, delete and cleanup client, but do not free. */
if (nc->peer && nc->peer->info->type == NET_CLIENT_TYPE_NIC) {
@@ -282,7 +282,7 @@ void qemu_del_vlan_client(NetClientState *nc)
if (nc->peer->info->link_status_changed) {
nc->peer->info->link_status_changed(nc->peer);
}
- qemu_cleanup_vlan_client(nc);
+ qemu_cleanup_net_client(nc);
return;
}
@@ -290,12 +290,12 @@ void qemu_del_vlan_client(NetClientState *nc)
if (nc->peer && nc->info->type == NET_CLIENT_TYPE_NIC) {
NICState *nic = DO_UPCAST(NICState, nc, nc);
if (nic->peer_deleted) {
- qemu_free_vlan_client(nc->peer);
+ qemu_free_net_client(nc->peer);
}
}
- qemu_cleanup_vlan_client(nc);
- qemu_free_vlan_client(nc);
+ qemu_cleanup_net_client(nc);
+ qemu_free_net_client(nc);
}
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
@@ -1032,7 +1032,7 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "invalid host network device %s\n", device);
return;
}
- qemu_del_vlan_client(nc);
+ qemu_del_net_client(nc);
}
int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
@@ -1063,7 +1063,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
qerror_report(QERR_DEVICE_NOT_FOUND, id);
return -1;
}
- qemu_del_vlan_client(nc);
+ qemu_del_net_client(nc);
qemu_opts_del(qemu_opts_find(qemu_find_opts("netdev"), id));
return 0;
}
@@ -1133,7 +1133,7 @@ void net_cleanup(void)
NetClientState *nc, *next_vc;
QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) {
- qemu_del_vlan_client(nc);
+ qemu_del_net_client(nc);
}
}
diff --git a/net.h b/net.h
index f2fec6f..250669a 100644
--- a/net.h
+++ b/net.h
@@ -89,7 +89,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
const char *model,
const char *name,
void *opaque);
-void qemu_del_vlan_client(NetClientState *nc);
+void qemu_del_net_client(NetClientState *nc);
NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
const char *client_str);
typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
diff --git a/net/slirp.c b/net/slirp.c
index 2014774..a6ede2b 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -274,7 +274,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
return 0;
error:
- qemu_del_vlan_client(nc);
+ qemu_del_net_client(nc);
return -1;
}
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (11 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 20:34 ` Jan Kiszka
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
` (3 subsequent siblings)
16 siblings, 1 reply; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 7 ++++++-
net/hub.c | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/net.c b/net.c
index 61dc28d..79ac51f 100644
--- a/net.c
+++ b/net.c
@@ -887,6 +887,12 @@ static const struct {
},
},
#endif /* CONFIG_NET_BRIDGE */
+ [NET_CLIENT_TYPE_HUB] = {
+ .type = "hubport",
+ .desc = {
+ { /* end of list */ }
+ },
+ },
};
int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
@@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
NetClientState *nc, *peer;
net_client_type type;
- monitor_printf(mon, "Devices not on any VLAN:\n");
QTAILQ_FOREACH(nc, &net_clients, next) {
peer = nc->peer;
type = nc->info->type;
diff --git a/net/hub.c b/net/hub.c
index 0cc385e..8a583ab 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
QLIST_FOREACH(hub, &hubs, next) {
monitor_printf(mon, "hub %u\n", hub->id);
QLIST_FOREACH(port, &hub->ports, next) {
- monitor_printf(mon, " port %u peer %s\n", port->id,
+ monitor_printf(mon, " \\ %s\n",
port->nc.peer ? port->nc.peer->name : "<none>");
}
}
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 14/16] net: cleanup deliver/deliver_iov func pointers
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (12 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
` (2 subsequent siblings)
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net.c | 35 +++++++++++------------------------
net.h | 11 +++++++++++
net/queue.c | 13 ++++---------
net/queue.h | 17 ++---------------
4 files changed, 28 insertions(+), 48 deletions(-)
diff --git a/net.c b/net.c
index 79ac51f..2d7f445 100644
--- a/net.c
+++ b/net.c
@@ -181,17 +181,6 @@ static char *assign_name(NetClientState *nc1, const char *model)
return g_strdup(buf);
}
-static ssize_t qemu_deliver_packet(NetClientState *sender,
- unsigned flags,
- const uint8_t *data,
- size_t size,
- void *opaque);
-static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
- unsigned flags,
- const struct iovec *iov,
- int iovcnt,
- void *opaque);
-
NetClientState *qemu_new_net_client(NetClientInfo *info,
NetClientState *peer,
const char *model,
@@ -218,9 +207,7 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
}
QTAILQ_INSERT_TAIL(&net_clients, nc, next);
- nc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
- qemu_deliver_packet_iov,
- nc);
+ nc->send_queue = qemu_new_net_queue(nc);
return nc;
}
@@ -324,11 +311,11 @@ int qemu_can_send_packet(NetClientState *sender)
return 1;
}
-static ssize_t qemu_deliver_packet(NetClientState *sender,
- unsigned flags,
- const uint8_t *data,
- size_t size,
- void *opaque)
+ssize_t qemu_deliver_packet(NetClientState *sender,
+ unsigned flags,
+ const uint8_t *data,
+ size_t size,
+ void *opaque)
{
NetClientState *nc = opaque;
ssize_t ret;
@@ -421,11 +408,11 @@ static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
return nc->info->receive(nc, buffer, offset);
}
-static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
- unsigned flags,
- const struct iovec *iov,
- int iovcnt,
- void *opaque)
+ssize_t qemu_deliver_packet_iov(NetClientState *sender,
+ unsigned flags,
+ const struct iovec *iov,
+ int iovcnt,
+ void *opaque)
{
NetClientState *nc = opaque;
diff --git a/net.h b/net.h
index 250669a..7779b6a 100644
--- a/net.h
+++ b/net.h
@@ -112,6 +112,17 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
int qemu_find_nic_model(NICInfo *nd, const char * const *models,
const char *default_model);
+ssize_t qemu_deliver_packet(NetClientState *sender,
+ unsigned flags,
+ const uint8_t *data,
+ size_t size,
+ void *opaque);
+ssize_t qemu_deliver_packet_iov(NetClientState *sender,
+ unsigned flags,
+ const struct iovec *iov,
+ int iovcnt,
+ void *opaque);
+
void do_info_network(Monitor *mon);
/* NIC info */
diff --git a/net/queue.c b/net/queue.c
index 35c3463..0afd783 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -23,6 +23,7 @@
#include "net/queue.h"
#include "qemu-queue.h"
+#include "net.h"
/* The delivery handler may only return zero if it will call
* qemu_net_queue_flush() when it determines that it is once again able
@@ -48,8 +49,6 @@ struct NetPacket {
};
struct NetQueue {
- NetPacketDeliver *deliver;
- NetPacketDeliverIOV *deliver_iov;
void *opaque;
QTAILQ_HEAD(packets, NetPacket) packets;
@@ -57,16 +56,12 @@ struct NetQueue {
unsigned delivering : 1;
};
-NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
- NetPacketDeliverIOV *deliver_iov,
- void *opaque)
+NetQueue *qemu_new_net_queue(void *opaque)
{
NetQueue *queue;
queue = g_malloc0(sizeof(NetQueue));
- queue->deliver = deliver;
- queue->deliver_iov = deliver_iov;
queue->opaque = opaque;
QTAILQ_INIT(&queue->packets);
@@ -151,7 +146,7 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
ssize_t ret = -1;
queue->delivering = 1;
- ret = queue->deliver(sender, flags, data, size, queue->opaque);
+ ret = qemu_deliver_packet(sender, flags, data, size, queue->opaque);
queue->delivering = 0;
return ret;
@@ -166,7 +161,7 @@ static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
ssize_t ret = -1;
queue->delivering = 1;
- ret = queue->deliver_iov(sender, flags, iov, iovcnt, queue->opaque);
+ ret = qemu_deliver_packet_iov(sender, flags, iov, iovcnt, queue->opaque);
queue->delivering = 0;
return ret;
diff --git a/net/queue.h b/net/queue.h
index d8eac0b..9d44a9b 100644
--- a/net/queue.h
+++ b/net/queue.h
@@ -31,24 +31,11 @@ typedef struct NetQueue NetQueue;
typedef void (NetPacketSent) (NetClientState *sender, ssize_t ret);
-typedef ssize_t (NetPacketDeliver) (NetClientState *sender,
- unsigned flags,
- const uint8_t *buf,
- size_t size,
- void *opaque);
-
-typedef ssize_t (NetPacketDeliverIOV) (NetClientState *sender,
- unsigned flags,
- const struct iovec *iov,
- int iovcnt,
- void *opaque);
-
#define QEMU_NET_PACKET_FLAG_NONE 0
#define QEMU_NET_PACKET_FLAG_RAW (1<<0)
-NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
- NetPacketDeliverIOV *deliver_iov,
- void *opaque);
+NetQueue *qemu_new_net_queue(void *opaque);
+
void qemu_del_net_queue(NetQueue *queue);
ssize_t qemu_net_queue_send(NetQueue *queue,
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 15/16] net: determine if packets can be sent before net queue deliver packets
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (13 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control zwu.kernel
2012-05-24 20:53 ` [Qemu-devel] [PATCH v3 00/16] net: hub-based networking Luiz Capitulino
16 siblings, 0 replies; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net/queue.c | 8 ++++----
net/slirp.c | 7 -------
slirp/if.c | 5 -----
slirp/libslirp.h | 1 -
4 files changed, 4 insertions(+), 17 deletions(-)
diff --git a/net/queue.c b/net/queue.c
index 0afd783..7484d2a 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -176,8 +176,8 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
{
ssize_t ret;
- if (queue->delivering) {
- return qemu_net_queue_append(queue, sender, flags, data, size, NULL);
+ if (queue->delivering || !qemu_can_send_packet(sender)) {
+ return qemu_net_queue_append(queue, sender, flags, data, size, sent_cb);
}
ret = qemu_net_queue_deliver(queue, sender, flags, data, size);
@@ -200,8 +200,8 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
{
ssize_t ret;
- if (queue->delivering) {
- return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, NULL);
+ if (queue->delivering || !qemu_can_send_packet(sender)) {
+ return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, sent_cb);
}
ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt);
diff --git a/net/slirp.c b/net/slirp.c
index a6ede2b..248f7ff 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -96,13 +96,6 @@ static void slirp_smb_cleanup(SlirpState *s);
static inline void slirp_smb_cleanup(SlirpState *s) { }
#endif
-int slirp_can_output(void *opaque)
-{
- SlirpState *s = opaque;
-
- return qemu_can_send_packet(&s->nc);
-}
-
void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
{
SlirpState *s = opaque;
diff --git a/slirp/if.c b/slirp/if.c
index 096cf6f..533295d 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -177,11 +177,6 @@ void if_start(Slirp *slirp)
}
while (ifm_next) {
- /* check if we can really output */
- if (!slirp_can_output(slirp->opaque)) {
- break;
- }
-
ifm = ifm_next;
from_batchq = next_from_batchq;
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 77527ad..9b471b5 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -25,7 +25,6 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds,
void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
/* you must provide the following functions: */
-int slirp_can_output(void *opaque);
void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len);
int slirp_add_hostfwd(Slirp *slirp, int is_udp,
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (14 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
@ 2012-05-24 17:59 ` zwu.kernel
2012-05-25 7:04 ` Paolo Bonzini
2012-05-24 20:53 ` [Qemu-devel] [PATCH v3 00/16] net: hub-based networking Luiz Capitulino
16 siblings, 1 reply; 52+ messages in thread
From: zwu.kernel @ 2012-05-24 17:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka
From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
net/hub.c | 35 ++++++++++++++++++++++++++++++++---
net/hub.h | 2 ++
net/queue.c | 5 +++++
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/net/hub.c b/net/hub.c
index 8a583ab..d27c52a 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -28,6 +28,7 @@ typedef struct NetHubPort {
QLIST_ENTRY(NetHubPort) next;
NetHub *hub;
unsigned int id;
+ uint64_t nr_packets;
} NetHubPort;
struct NetHub {
@@ -39,19 +40,37 @@ struct NetHub {
static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
+static void net_hub_receive_completed(NetClientState *nc, ssize_t len)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+ port->nr_packets--;
+ if (!port->nr_packets) {
+ qemu_net_queue_flush(nc->peer->send_queue);
+ }
+}
+
+void net_hub_port_packet_stats(NetClientState *nc)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+ port->nr_packets++;
+}
+
static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
const uint8_t *buf, size_t len)
{
NetHubPort *port;
+ ssize_t ret = 0;
QLIST_FOREACH(port, &hub->ports, next) {
if (port == source_port) {
continue;
}
- qemu_send_packet(&port->nc, buf, len);
+ ret = qemu_send_packet_async(&port->nc, buf, len,
+ net_hub_receive_completed);
}
- return len;
+ return ret;
}
static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
@@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
continue;
}
- ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
+ ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
+ net_hub_receive_completed);
}
return ret;
}
@@ -84,6 +104,13 @@ static NetHub *net_hub_new(unsigned int id)
return hub;
}
+static int net_hub_port_can_receive(NetClientState *nc)
+{
+ NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+ return port->nr_packets ? 0 : 1;
+}
+
static ssize_t net_hub_port_receive(NetClientState *nc,
const uint8_t *buf, size_t len)
{
@@ -110,6 +137,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
static NetClientInfo net_hub_port_info = {
.type = NET_CLIENT_TYPE_HUB,
.size = sizeof(NetHubPort),
+ .can_receive = net_hub_port_can_receive,
.receive = net_hub_port_receive,
.receive_iov = net_hub_port_receive_iov,
.cleanup = net_hub_port_cleanup,
@@ -128,6 +156,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
port = DO_UPCAST(NetHubPort, nc, nc);
port->id = id;
port->hub = hub;
+ port->nr_packets = 0;
QLIST_INSERT_HEAD(&hub->ports, port, next);
diff --git a/net/hub.h b/net/hub.h
index d04f1b1..542e657 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -23,4 +23,6 @@ void net_hub_info(Monitor *mon);
int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
void net_hub_check_clients(void);
+void net_hub_port_packet_stats(NetClientState *nc);
+
#endif /* NET_HUB_H */
diff --git a/net/queue.c b/net/queue.c
index 7484d2a..ebf18aa 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -22,6 +22,7 @@
*/
#include "net/queue.h"
+#include "net/hub.h"
#include "qemu-queue.h"
#include "net.h"
@@ -101,6 +102,8 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
+ net_hub_port_packet_stats(sender);
+
return size;
}
@@ -134,6 +137,8 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
+ net_hub_port_packet_stats(sender);
+
return packet->size;
}
--
1.7.6
^ permalink raw reply related [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info zwu.kernel
@ 2012-05-24 20:34 ` Jan Kiszka
2012-05-25 0:48 ` Zhi Yong Wu
2012-05-25 12:00 ` Zhi Yong Wu
0 siblings, 2 replies; 52+ messages in thread
From: Jan Kiszka @ 2012-05-24 20:34 UTC (permalink / raw)
To: zwu.kernel@gmail.com
Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
stefanha@linux.vnet.ibm.com
On 2012-05-24 14:59, zwu.kernel@gmail.com wrote:
> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>
> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> ---
> net.c | 7 ++++++-
> net/hub.c | 2 +-
> 2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/net.c b/net.c
> index 61dc28d..79ac51f 100644
> --- a/net.c
> +++ b/net.c
> @@ -887,6 +887,12 @@ static const struct {
> },
> },
> #endif /* CONFIG_NET_BRIDGE */
> + [NET_CLIENT_TYPE_HUB] = {
> + .type = "hubport",
> + .desc = {
> + { /* end of list */ }
> + },
> + },
> };
>
> int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
> @@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
> NetClientState *nc, *peer;
> net_client_type type;
>
> - monitor_printf(mon, "Devices not on any VLAN:\n");
> QTAILQ_FOREACH(nc, &net_clients, next) {
> peer = nc->peer;
> type = nc->info->type;
> diff --git a/net/hub.c b/net/hub.c
> index 0cc385e..8a583ab 100644
> --- a/net/hub.c
> +++ b/net/hub.c
> @@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
> QLIST_FOREACH(hub, &hubs, next) {
> monitor_printf(mon, "hub %u\n", hub->id);
> QLIST_FOREACH(port, &hub->ports, next) {
> - monitor_printf(mon, " port %u peer %s\n", port->id,
> + monitor_printf(mon, " \\ %s\n",
> port->nc.peer ? port->nc.peer->name : "<none>");
> }
> }
I still do not agree with this formatting (peer -> hubport + hub ->
abbreviated peers instead of just hub -> peers). But the series has a
higher value than this, and we can fix on top - unless there is a need
for another round anyway.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
` (15 preceding siblings ...)
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control zwu.kernel
@ 2012-05-24 20:53 ` Luiz Capitulino
2012-05-25 0:47 ` Zhi Yong Wu
2012-05-25 10:07 ` Stefan Hajnoczi
16 siblings, 2 replies; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-24 20:53 UTC (permalink / raw)
To: zwu.kernel; +Cc: stefanha, kvm, jan.kiszka, qemu-devel, wuzhy, pbonzini
On Fri, 25 May 2012 01:59:06 +0800
zwu.kernel@gmail.com wrote:
> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>
> The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
Honest question: does it really pay off to have this in qemu vs. using one of
the externaly available solutions?
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-24 20:53 ` [Qemu-devel] [PATCH v3 00/16] net: hub-based networking Luiz Capitulino
@ 2012-05-25 0:47 ` Zhi Yong Wu
2012-05-25 12:49 ` Luiz Capitulino
2012-05-25 10:07 ` Stefan Hajnoczi
1 sibling, 1 reply; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 0:47 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: stefanha, kvm, jan.kiszka, qemu-devel, wuzhy, pbonzini
On Fri, May 25, 2012 at 4:53 AM, Luiz Capitulino <lcapitulino@redhat.com> wrote:
> On Fri, 25 May 2012 01:59:06 +0800
> zwu.kernel@gmail.com wrote:
>
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
>
> Honest question: does it really pay off to have this in qemu vs. using one of
It's said that it can speed up packets delivery, but i have not do
every bechmark testings.
For more details, please refer to
http://thread.gmane.org/gmane.comp.emulators.qemu/133362
> the externaly available solutions?
Is there external available solutions?:), What are they? Open vSwitch?
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-24 20:34 ` Jan Kiszka
@ 2012-05-25 0:48 ` Zhi Yong Wu
2012-05-25 12:00 ` Zhi Yong Wu
1 sibling, 0 replies; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 0:48 UTC (permalink / raw)
To: Jan Kiszka
Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
stefanha@linux.vnet.ibm.com
On Fri, May 25, 2012 at 4:34 AM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-24 14:59, zwu.kernel@gmail.com wrote:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>> net.c | 7 ++++++-
>> net/hub.c | 2 +-
>> 2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/net.c b/net.c
>> index 61dc28d..79ac51f 100644
>> --- a/net.c
>> +++ b/net.c
>> @@ -887,6 +887,12 @@ static const struct {
>> },
>> },
>> #endif /* CONFIG_NET_BRIDGE */
>> + [NET_CLIENT_TYPE_HUB] = {
>> + .type = "hubport",
>> + .desc = {
>> + { /* end of list */ }
>> + },
>> + },
>> };
>>
>> int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>> @@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
>> NetClientState *nc, *peer;
>> net_client_type type;
>>
>> - monitor_printf(mon, "Devices not on any VLAN:\n");
>> QTAILQ_FOREACH(nc, &net_clients, next) {
>> peer = nc->peer;
>> type = nc->info->type;
>> diff --git a/net/hub.c b/net/hub.c
>> index 0cc385e..8a583ab 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
>> QLIST_FOREACH(hub, &hubs, next) {
>> monitor_printf(mon, "hub %u\n", hub->id);
>> QLIST_FOREACH(port, &hub->ports, next) {
>> - monitor_printf(mon, " port %u peer %s\n", port->id,
>> + monitor_printf(mon, " \\ %s\n",
>> port->nc.peer ? port->nc.peer->name : "<none>");
>> }
>> }
>
> I still do not agree with this formatting (peer -> hubport + hub ->
> abbreviated peers instead of just hub -> peers). But the series has a
> higher value than this, and we can fix on top - unless there is a need
> for another round anyway.
OK, i agree.
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control zwu.kernel
@ 2012-05-25 7:04 ` Paolo Bonzini
2012-05-25 7:48 ` Zhi Yong Wu
` (2 more replies)
0 siblings, 3 replies; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 7:04 UTC (permalink / raw)
To: zwu.kernel; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
Il 24/05/2012 19:59, zwu.kernel@gmail.com ha scritto:
> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>
> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> ---
> net/hub.c | 35 ++++++++++++++++++++++++++++++++---
> net/hub.h | 2 ++
> net/queue.c | 5 +++++
> 3 files changed, 39 insertions(+), 3 deletions(-)
>
> diff --git a/net/hub.c b/net/hub.c
> index 8a583ab..d27c52a 100644
> --- a/net/hub.c
> +++ b/net/hub.c
> @@ -28,6 +28,7 @@ typedef struct NetHubPort {
> QLIST_ENTRY(NetHubPort) next;
> NetHub *hub;
> unsigned int id;
> + uint64_t nr_packets;
> } NetHubPort;
>
> struct NetHub {
> @@ -39,19 +40,37 @@ struct NetHub {
>
> static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
>
> +static void net_hub_receive_completed(NetClientState *nc, ssize_t len)
> +{
> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
> + port->nr_packets--;
> + if (!port->nr_packets) {
> + qemu_net_queue_flush(nc->peer->send_queue);
> + }
> +}
> +
> +void net_hub_port_packet_stats(NetClientState *nc)
> +{
> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
> +
> + port->nr_packets++;
> +}
Isn't this being called also for non-hubport clients?
> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
> const uint8_t *buf, size_t len)
> {
> NetHubPort *port;
> + ssize_t ret = 0;
>
> QLIST_FOREACH(port, &hub->ports, next) {
> if (port == source_port) {
> continue;
> }
>
> - qemu_send_packet(&port->nc, buf, len);
> + ret = qemu_send_packet_async(&port->nc, buf, len,
> + net_hub_receive_completed);
Just increment nr_packets here:
ret = qemu_send_packet_async
if (ret == 0) {
port->nr_packets++;
}
> }
> - return len;
> + return ret;
You can return len here. In fact returning ret is wrong because the
value comes from a random port (the last one).
> }
>
> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
> continue;
> }
>
> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
> + net_hub_receive_completed);
Same here (increment nr_packets)
> }
> return ret;
Same here (return len).
> }
> @@ -84,6 +104,13 @@ static NetHub *net_hub_new(unsigned int id)
> return hub;
> }
>
> +static int net_hub_port_can_receive(NetClientState *nc)
> +{
> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
> +
> + return port->nr_packets ? 0 : 1;
> +}
This is "return port->nr_packets == 0;".
But I think you need to implement this on the hub rather than on the
port, and return true only if port->nr_packets == 0 for all ports.
Probably you can move nr_packets to the hub itself rather than the port?
> static ssize_t net_hub_port_receive(NetClientState *nc,
> const uint8_t *buf, size_t len)
> {
> @@ -110,6 +137,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
> static NetClientInfo net_hub_port_info = {
> .type = NET_CLIENT_TYPE_HUB,
> .size = sizeof(NetHubPort),
> + .can_receive = net_hub_port_can_receive,
> .receive = net_hub_port_receive,
> .receive_iov = net_hub_port_receive_iov,
> .cleanup = net_hub_port_cleanup,
> @@ -128,6 +156,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
> port = DO_UPCAST(NetHubPort, nc, nc);
> port->id = id;
> port->hub = hub;
> + port->nr_packets = 0;
>
> QLIST_INSERT_HEAD(&hub->ports, port, next);
>
Everything below this has to go away (sender is not necessarily a hub
port!).
> diff --git a/net/hub.h b/net/hub.h
> index d04f1b1..542e657 100644
> --- a/net/hub.h
> +++ b/net/hub.h
> @@ -23,4 +23,6 @@ void net_hub_info(Monitor *mon);
> int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
> void net_hub_check_clients(void);
>
> +void net_hub_port_packet_stats(NetClientState *nc);
> +
> #endif /* NET_HUB_H */
> diff --git a/net/queue.c b/net/queue.c
> index 7484d2a..ebf18aa 100644
> --- a/net/queue.c
> +++ b/net/queue.c
> @@ -22,6 +22,7 @@
> */
>
> #include "net/queue.h"
> +#include "net/hub.h"
> #include "qemu-queue.h"
> #include "net.h"
>
> @@ -101,6 +102,8 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
>
> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>
> + net_hub_port_packet_stats(sender);
> +
> return size;
> }
>
> @@ -134,6 +137,8 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
>
> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>
> + net_hub_port_packet_stats(sender);
> +
> return packet->size;
> }
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-25 7:04 ` Paolo Bonzini
@ 2012-05-25 7:48 ` Zhi Yong Wu
2012-05-25 10:08 ` Paolo Bonzini
2012-05-25 8:04 ` Zhi Yong Wu
2012-05-25 8:18 ` Zhi Yong Wu
2 siblings, 1 reply; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 7:48 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
On Fri, May 25, 2012 at 3:04 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 24/05/2012 19:59, zwu.kernel@gmail.com ha scritto:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>> net/hub.c | 35 ++++++++++++++++++++++++++++++++---
>> net/hub.h | 2 ++
>> net/queue.c | 5 +++++
>> 3 files changed, 39 insertions(+), 3 deletions(-)
>>
>> diff --git a/net/hub.c b/net/hub.c
>> index 8a583ab..d27c52a 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -28,6 +28,7 @@ typedef struct NetHubPort {
>> QLIST_ENTRY(NetHubPort) next;
>> NetHub *hub;
>> unsigned int id;
>> + uint64_t nr_packets;
>> } NetHubPort;
>>
>> struct NetHub {
>> @@ -39,19 +40,37 @@ struct NetHub {
>>
>> static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
>>
>> +static void net_hub_receive_completed(NetClientState *nc, ssize_t len)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> + port->nr_packets--;
>> + if (!port->nr_packets) {
>> + qemu_net_queue_flush(nc->peer->send_queue);
>> + }
>> +}
>> +
>> +void net_hub_port_packet_stats(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + port->nr_packets++;
>> +}
>
> Isn't this being called also for non-hubport clients?
Thanks.
>
>> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
>> const uint8_t *buf, size_t len)
>> {
>> NetHubPort *port;
>> + ssize_t ret = 0;
>>
>> QLIST_FOREACH(port, &hub->ports, next) {
>> if (port == source_port) {
>> continue;
>> }
>>
>> - qemu_send_packet(&port->nc, buf, len);
>> + ret = qemu_send_packet_async(&port->nc, buf, len,
>> + net_hub_receive_completed);
>
> Just increment nr_packets here:
>
> ret = qemu_send_packet_async
> if (ret == 0) {
> port->nr_packets++;
> }
>
>> }
>> - return len;
>> + return ret;
>
> You can return len here. In fact returning ret is wrong because the
> value comes from a random port (the last one).
If the return value from the last port doesn't equal to len, you let
this function return len, it will be also wrong.
>
>> }
>>
>> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> continue;
>> }
>>
>> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
>> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
>> + net_hub_receive_completed);
>
> Same here (increment nr_packets)
>
>> }
>> return ret;
>
> Same here (return len).
No, it has no such variable called as len, I think that here should
return ret, not len.
Do you think that it is necessary to calc len by iov and viocnt?
>
>> }
>> @@ -84,6 +104,13 @@ static NetHub *net_hub_new(unsigned int id)
>> return hub;
>> }
>>
>> +static int net_hub_port_can_receive(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + return port->nr_packets ? 0 : 1;
>> +}
>
> This is "return port->nr_packets == 0;".
thanks.
>
> But I think you need to implement this on the hub rather than on the
> port, and return true only if port->nr_packets == 0 for all ports.
Can you explain why to need based on hub, not port?
> Probably you can move nr_packets to the hub itself rather than the port?
I think that the counter brings a lot of issues.
1.) The packet delivery is bidirectional. one direction is blocked
doesn't mean another direction also is blocked.
2.) If the packets comes from guest to outside, when hubport's
can_receive fails, the following packets will all be enqueued to
hubport queue, How will these packets in hubport queue are trigered to
send again? Maybe this will lead to introduce one timer for each
hubport queue.
>
>> static ssize_t net_hub_port_receive(NetClientState *nc,
>> const uint8_t *buf, size_t len)
>> {
>> @@ -110,6 +137,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
>> static NetClientInfo net_hub_port_info = {
>> .type = NET_CLIENT_TYPE_HUB,
>> .size = sizeof(NetHubPort),
>> + .can_receive = net_hub_port_can_receive,
>> .receive = net_hub_port_receive,
>> .receive_iov = net_hub_port_receive_iov,
>> .cleanup = net_hub_port_cleanup,
>> @@ -128,6 +156,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
>> port = DO_UPCAST(NetHubPort, nc, nc);
>> port->id = id;
>> port->hub = hub;
>> + port->nr_packets = 0;
>>
>> QLIST_INSERT_HEAD(&hub->ports, port, next);
>>
>
> Everything below this has to go away (sender is not necessarily a hub
> port!).
>
>> diff --git a/net/hub.h b/net/hub.h
>> index d04f1b1..542e657 100644
>> --- a/net/hub.h
>> +++ b/net/hub.h
>> @@ -23,4 +23,6 @@ void net_hub_info(Monitor *mon);
>> int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
>> void net_hub_check_clients(void);
>>
>> +void net_hub_port_packet_stats(NetClientState *nc);
>> +
>> #endif /* NET_HUB_H */
>> diff --git a/net/queue.c b/net/queue.c
>> index 7484d2a..ebf18aa 100644
>> --- a/net/queue.c
>> +++ b/net/queue.c
>> @@ -22,6 +22,7 @@
>> */
>>
>> #include "net/queue.h"
>> +#include "net/hub.h"
>> #include "qemu-queue.h"
>> #include "net.h"
>>
>> @@ -101,6 +102,8 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return size;
>> }
>>
>> @@ -134,6 +137,8 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return packet->size;
>> }
>>
>
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-25 7:04 ` Paolo Bonzini
2012-05-25 7:48 ` Zhi Yong Wu
@ 2012-05-25 8:04 ` Zhi Yong Wu
2012-05-25 8:18 ` Zhi Yong Wu
2 siblings, 0 replies; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 8:04 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
On Fri, May 25, 2012 at 3:04 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 24/05/2012 19:59, zwu.kernel@gmail.com ha scritto:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>> net/hub.c | 35 ++++++++++++++++++++++++++++++++---
>> net/hub.h | 2 ++
>> net/queue.c | 5 +++++
>> 3 files changed, 39 insertions(+), 3 deletions(-)
>>
>> diff --git a/net/hub.c b/net/hub.c
>> index 8a583ab..d27c52a 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -28,6 +28,7 @@ typedef struct NetHubPort {
>> QLIST_ENTRY(NetHubPort) next;
>> NetHub *hub;
>> unsigned int id;
>> + uint64_t nr_packets;
>> } NetHubPort;
>>
>> struct NetHub {
>> @@ -39,19 +40,37 @@ struct NetHub {
>>
>> static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
>>
>> +static void net_hub_receive_completed(NetClientState *nc, ssize_t len)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> + port->nr_packets--;
>> + if (!port->nr_packets) {
>> + qemu_net_queue_flush(nc->peer->send_queue);
>> + }
>> +}
>> +
>> +void net_hub_port_packet_stats(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + port->nr_packets++;
>> +}
>
> Isn't this being called also for non-hubport clients?
>
>> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
>> const uint8_t *buf, size_t len)
>> {
>> NetHubPort *port;
>> + ssize_t ret = 0;
>>
>> QLIST_FOREACH(port, &hub->ports, next) {
>> if (port == source_port) {
>> continue;
>> }
>>
>> - qemu_send_packet(&port->nc, buf, len);
>> + ret = qemu_send_packet_async(&port->nc, buf, len,
>> + net_hub_receive_completed);
>
> Just increment nr_packets here:
>
> ret = qemu_send_packet_async
> if (ret == 0) {
> port->nr_packets++;
> }
This is wrong, if you check the code, sent_cb is only called when the
send queue is not empty. That is, sent_cb is used for those enqueued
packets. For those packets which aren't enqueued, The counter will be
not decreased. And when qemu_send_packet_async/qemu_sendv_packet_async
return, flush function has been executed. But you increase the
coutner, when the next following packets come, they will be enqueued
without condition. And no timer triger the hubport queue to fire
again.
>
>> }
>> - return len;
>> + return ret;
>
> You can return len here. In fact returning ret is wrong because the
> value comes from a random port (the last one).
>
>> }
>>
>> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> continue;
>> }
>>
>> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
>> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
>> + net_hub_receive_completed);
>
> Same here (increment nr_packets)
>
>> }
>> return ret;
>
> Same here (return len).
>
>> }
>> @@ -84,6 +104,13 @@ static NetHub *net_hub_new(unsigned int id)
>> return hub;
>> }
>>
>> +static int net_hub_port_can_receive(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + return port->nr_packets ? 0 : 1;
>> +}
>
> This is "return port->nr_packets == 0;".
>
> But I think you need to implement this on the hub rather than on the
> port, and return true only if port->nr_packets == 0 for all ports.
> Probably you can move nr_packets to the hub itself rather than the port?
>
>> static ssize_t net_hub_port_receive(NetClientState *nc,
>> const uint8_t *buf, size_t len)
>> {
>> @@ -110,6 +137,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
>> static NetClientInfo net_hub_port_info = {
>> .type = NET_CLIENT_TYPE_HUB,
>> .size = sizeof(NetHubPort),
>> + .can_receive = net_hub_port_can_receive,
>> .receive = net_hub_port_receive,
>> .receive_iov = net_hub_port_receive_iov,
>> .cleanup = net_hub_port_cleanup,
>> @@ -128,6 +156,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
>> port = DO_UPCAST(NetHubPort, nc, nc);
>> port->id = id;
>> port->hub = hub;
>> + port->nr_packets = 0;
>>
>> QLIST_INSERT_HEAD(&hub->ports, port, next);
>>
>
> Everything below this has to go away (sender is not necessarily a hub
> port!).
>
>> diff --git a/net/hub.h b/net/hub.h
>> index d04f1b1..542e657 100644
>> --- a/net/hub.h
>> +++ b/net/hub.h
>> @@ -23,4 +23,6 @@ void net_hub_info(Monitor *mon);
>> int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
>> void net_hub_check_clients(void);
>>
>> +void net_hub_port_packet_stats(NetClientState *nc);
>> +
>> #endif /* NET_HUB_H */
>> diff --git a/net/queue.c b/net/queue.c
>> index 7484d2a..ebf18aa 100644
>> --- a/net/queue.c
>> +++ b/net/queue.c
>> @@ -22,6 +22,7 @@
>> */
>>
>> #include "net/queue.h"
>> +#include "net/hub.h"
>> #include "qemu-queue.h"
>> #include "net.h"
>>
>> @@ -101,6 +102,8 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return size;
>> }
>>
>> @@ -134,6 +137,8 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return packet->size;
>> }
>>
>
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-25 7:04 ` Paolo Bonzini
2012-05-25 7:48 ` Zhi Yong Wu
2012-05-25 8:04 ` Zhi Yong Wu
@ 2012-05-25 8:18 ` Zhi Yong Wu
2 siblings, 0 replies; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 8:18 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
On Fri, May 25, 2012 at 3:04 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 24/05/2012 19:59, zwu.kernel@gmail.com ha scritto:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>> net/hub.c | 35 ++++++++++++++++++++++++++++++++---
>> net/hub.h | 2 ++
>> net/queue.c | 5 +++++
>> 3 files changed, 39 insertions(+), 3 deletions(-)
>>
>> diff --git a/net/hub.c b/net/hub.c
>> index 8a583ab..d27c52a 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -28,6 +28,7 @@ typedef struct NetHubPort {
>> QLIST_ENTRY(NetHubPort) next;
>> NetHub *hub;
>> unsigned int id;
>> + uint64_t nr_packets;
>> } NetHubPort;
>>
>> struct NetHub {
>> @@ -39,19 +40,37 @@ struct NetHub {
>>
>> static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
>>
>> +static void net_hub_receive_completed(NetClientState *nc, ssize_t len)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> + port->nr_packets--;
>> + if (!port->nr_packets) {
>> + qemu_net_queue_flush(nc->peer->send_queue);
>> + }
>> +}
>> +
>> +void net_hub_port_packet_stats(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + port->nr_packets++;
>> +}
>
> Isn't this being called also for non-hubport clients?
>
>> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
>> const uint8_t *buf, size_t len)
>> {
>> NetHubPort *port;
>> + ssize_t ret = 0;
>>
>> QLIST_FOREACH(port, &hub->ports, next) {
>> if (port == source_port) {
>> continue;
>> }
>>
>> - qemu_send_packet(&port->nc, buf, len);
>> + ret = qemu_send_packet_async(&port->nc, buf, len,
>> + net_hub_receive_completed);
>
> Just increment nr_packets here:
>
> ret = qemu_send_packet_async
> if (ret == 0) {
> port->nr_packets++;
> }
>
>> }
>> - return len;
>> + return ret;
>
> You can return len here. In fact returning ret is wrong because the
> value comes from a random port (the last one).
>
>> }
>>
>> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>> continue;
>> }
>>
>> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
>> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
>> + net_hub_receive_completed);
>
> Same here (increment nr_packets)
>
>> }
>> return ret;
>
> Same here (return len).
>
>> }
>> @@ -84,6 +104,13 @@ static NetHub *net_hub_new(unsigned int id)
>> return hub;
>> }
>>
>> +static int net_hub_port_can_receive(NetClientState *nc)
>> +{
>> + NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
>> +
>> + return port->nr_packets ? 0 : 1;
>> +}
>
> This is "return port->nr_packets == 0;".
>
> But I think you need to implement this on the hub rather than on the
> port, and return true only if port->nr_packets == 0 for all ports.
I don't think so.
e.g. guest <---> hubport1 - hubport2 <--> network backend.
hubport1->nr_packets == 0 mean if guest can send packet through
hubport1 to outside.
while hubport2->nr_packets == 0 mean if network backend can send
packet through hubport1 to guest.
Their direction is different. So i don't understand why to need
"port->nr_packets == 0 for all ports"?
> Probably you can move nr_packets to the hub itself rather than the port?
>
>> static ssize_t net_hub_port_receive(NetClientState *nc,
>> const uint8_t *buf, size_t len)
>> {
>> @@ -110,6 +137,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
>> static NetClientInfo net_hub_port_info = {
>> .type = NET_CLIENT_TYPE_HUB,
>> .size = sizeof(NetHubPort),
>> + .can_receive = net_hub_port_can_receive,
>> .receive = net_hub_port_receive,
>> .receive_iov = net_hub_port_receive_iov,
>> .cleanup = net_hub_port_cleanup,
>> @@ -128,6 +156,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
>> port = DO_UPCAST(NetHubPort, nc, nc);
>> port->id = id;
>> port->hub = hub;
>> + port->nr_packets = 0;
>>
>> QLIST_INSERT_HEAD(&hub->ports, port, next);
>>
>
> Everything below this has to go away (sender is not necessarily a hub
> port!).
>
>> diff --git a/net/hub.h b/net/hub.h
>> index d04f1b1..542e657 100644
>> --- a/net/hub.h
>> +++ b/net/hub.h
>> @@ -23,4 +23,6 @@ void net_hub_info(Monitor *mon);
>> int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
>> void net_hub_check_clients(void);
>>
>> +void net_hub_port_packet_stats(NetClientState *nc);
>> +
>> #endif /* NET_HUB_H */
>> diff --git a/net/queue.c b/net/queue.c
>> index 7484d2a..ebf18aa 100644
>> --- a/net/queue.c
>> +++ b/net/queue.c
>> @@ -22,6 +22,7 @@
>> */
>>
>> #include "net/queue.h"
>> +#include "net/hub.h"
>> #include "qemu-queue.h"
>> #include "net.h"
>>
>> @@ -101,6 +102,8 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return size;
>> }
>>
>> @@ -134,6 +137,8 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
>>
>> QTAILQ_INSERT_TAIL(&queue->packets, packet, entry);
>>
>> + net_hub_port_packet_stats(sender);
>> +
>> return packet->size;
>> }
>>
>
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-24 20:53 ` [Qemu-devel] [PATCH v3 00/16] net: hub-based networking Luiz Capitulino
2012-05-25 0:47 ` Zhi Yong Wu
@ 2012-05-25 10:07 ` Stefan Hajnoczi
2012-05-25 11:18 ` Markus Armbruster
1 sibling, 1 reply; 52+ messages in thread
From: Stefan Hajnoczi @ 2012-05-25 10:07 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: kvm, jan.kiszka, qemu-devel, zwu.kernel, wuzhy, pbonzini
On Thu, May 24, 2012 at 05:53:21PM -0300, Luiz Capitulino wrote:
> On Fri, 25 May 2012 01:59:06 +0800
> zwu.kernel@gmail.com wrote:
>
> > From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> >
> > The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
>
> Honest question: does it really pay off to have this in qemu vs. using one of
> the externaly available solutions?
For typical KVM setups this feature will be unused.
However, the legacy QEMU "vlan" feature does have a few uses:
1. It's how the "dump" netdev can be connected up with a guest NIC and
host netdev. Create a hub, attach the guest NIC, attach the host
netdev, and attach the dump netdev. This allows the dump netdev to
see all traffic.
2. It lets you build virtual network segments. Several point-to-point
connections can be brought together. Start 3 VMs connected by the
"socket" netdev and have one of them use a hub. This may be
inefficient but I wouldn't be surprised if there are people out there
doing this.
The point of this patch series is to remove the special-case net.c code
for the legacy "vlan" feature. Today's code makes it harder to
implement a clean QOM model and is a burden for the net subsystem in
general. This series takes the vlan functionality and puts it into a
normal netdev - it extracts the feature from net.c.
(If we didn't care about backwards compatibility we could just drop
vlans completely and rewrite the "dump" netdev to hook into the net.h
API somehow.)
Stefan
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-25 7:48 ` Zhi Yong Wu
@ 2012-05-25 10:08 ` Paolo Bonzini
2012-05-25 10:54 ` Zhi Yong Wu
0 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 10:08 UTC (permalink / raw)
To: Zhi Yong Wu; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
Il 25/05/2012 09:48, Zhi Yong Wu ha scritto:
>>> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
>>> const uint8_t *buf, size_t len)
>>> {
>>> NetHubPort *port;
>>> + ssize_t ret = 0;
>>>
>>> QLIST_FOREACH(port, &hub->ports, next) {
>>> if (port == source_port) {
>>> continue;
>>> }
>>>
>>> - qemu_send_packet(&port->nc, buf, len);
>>> + ret = qemu_send_packet_async(&port->nc, buf, len,
>>> + net_hub_receive_completed);
>>
>> Just increment nr_packets here:
>>
>> ret = qemu_send_packet_async
>> if (ret == 0) {
>> port->nr_packets++;
>> }
> This is wrong, if you check the code, sent_cb is only called when the
> send queue is not empty. That is, sent_cb is used for those enqueued
> packets. For those packets which aren't enqueued, The counter will be
> not decreased.
It will also not be incremented, because I'm checking for ret == 0.
>>> }
>>> - return len;
>>> + return ret;
>>
>> You can return len here. In fact returning ret is wrong because the
>> value comes from a random port (the last one).
> If the return value from the last port doesn't equal to len, you let
> this function return len, it will be also wrong.
But that's the whole point of implementing flow control. We return len
because we _did_ process the packet; it is now in the port's queues.
However, can_receive will not admit new packets until all ports have
processed the previous one, so that all ports advance to new packets at
the same time.
>>
>>> }
>>>
>>> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>>> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>>> continue;
>>> }
>>>
>>> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
>>> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
>>> + net_hub_receive_completed);
>>
>> Same here (increment nr_packets)
>>
>>> }
>>> return ret;
>>
>> Same here (return len).
> No, it has no such variable called as len, I think that here should
> return ret, not len.
> Do you think that it is necessary to calc len by iov and viocnt?
Yes, for the same reason as above. Returning "ret" for a random port
(the last one) does not make sense! But you could just punt: do not
implement net_hub_receive_iov at all...
>> But I think you need to implement this on the hub rather than on the
>> port, and return true only if port->nr_packets == 0 for all ports.
> Can you explain why to need based on hub, not port?
Because the purpose of the counter is to do flow control _on the hub_.
The ports can do their flow control just as well, but the hub has to
reconcile the decisions of the ports.
Taking your example from another message:
> e.g. guest <---> hubport1 - hubport2 <--> network backend.
> hubport1->nr_packets == 0 mean if guest can send packet through
> hubport1 to outside.
> while hubport2->nr_packets == 0 mean if network backend can send
> packet through hubport1 to guest.
> Their direction is different.
> So i don't understand why to need
> "port->nr_packets == 0 for all ports"?
For simplicity. Yes, this means hubs will be half-duplex. In practice
I don't think you need to care.
If you want to make it full-duplex, you can keep the per-port counter
and in can_receive check if all ports except this one has a zero
nr_packets count. In other words, your can_receive method is backwards:
a port can receive a packet if all of its sibling ports are ready to
receive it.
Don't think of it in terms of "directions". It is not correct, because
it is a star topology. Think of it in terms of where the packets enter
the hub, and where they are forwarded to.
>> Probably you can move nr_packets to the hub itself rather than the port?
> I think that the counter brings a lot of issues.
I said already that it's not *necessary*. You're free to find another
solution. Removing TODO comments and leaving the problem however is not
a solution.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control
2012-05-25 10:08 ` Paolo Bonzini
@ 2012-05-25 10:54 ` Zhi Yong Wu
0 siblings, 0 replies; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 10:54 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: jan.kiszka, wuzhy, qemu-devel, kvm, stefanha
On Fri, May 25, 2012 at 6:08 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 09:48, Zhi Yong Wu ha scritto:
>>>> static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
>>>> const uint8_t *buf, size_t len)
>>>> {
>>>> NetHubPort *port;
>>>> + ssize_t ret = 0;
>>>>
>>>> QLIST_FOREACH(port, &hub->ports, next) {
>>>> if (port == source_port) {
>>>> continue;
>>>> }
>>>>
>>>> - qemu_send_packet(&port->nc, buf, len);
>>>> + ret = qemu_send_packet_async(&port->nc, buf, len,
>>>> + net_hub_receive_completed);
>>>
>>> Just increment nr_packets here:
>>>
>>> ret = qemu_send_packet_async
>>> if (ret == 0) {
>>> port->nr_packets++;
>>> }
>> This is wrong, if you check the code, sent_cb is only called when the
>> send queue is not empty. That is, sent_cb is used for those enqueued
>> packets. For those packets which aren't enqueued, The counter will be
>> not decreased.
>
> It will also not be incremented, because I'm checking for ret == 0.
>
>>>> }
>>>> - return len;
>>>> + return ret;
>>>
>>> You can return len here. In fact returning ret is wrong because the
>>> value comes from a random port (the last one).
>> If the return value from the last port doesn't equal to len, you let
>> this function return len, it will be also wrong.
>
> But that's the whole point of implementing flow control. We return len
> because we _did_ process the packet; it is now in the port's queues.
> However, can_receive will not admit new packets until all ports have
> processed the previous one, so that all ports advance to new packets at
> the same time.
>
>>>
>>>> }
>>>>
>>>> static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>>>> @@ -65,7 +84,8 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
>>>> continue;
>>>> }
>>>>
>>>> - ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
>>>> + ret = qemu_sendv_packet_async(&port->nc, iov, iovcnt,
>>>> + net_hub_receive_completed);
>>>
>>> Same here (increment nr_packets)
>>>
>>>> }
>>>> return ret;
>>>
>>> Same here (return len).
>> No, it has no such variable called as len, I think that here should
>> return ret, not len.
>> Do you think that it is necessary to calc len by iov and viocnt?
>
> Yes, for the same reason as above. Returning "ret" for a random port
> (the last one) does not make sense! But you could just punt: do not
> implement net_hub_receive_iov at all...
>
>>> But I think you need to implement this on the hub rather than on the
>>> port, and return true only if port->nr_packets == 0 for all ports.
>> Can you explain why to need based on hub, not port?
>
> Because the purpose of the counter is to do flow control _on the hub_.
> The ports can do their flow control just as well, but the hub has to
> reconcile the decisions of the ports.
>
> Taking your example from another message:
>
>> e.g. guest <---> hubport1 - hubport2 <--> network backend.
>> hubport1->nr_packets == 0 mean if guest can send packet through
>> hubport1 to outside.
>> while hubport2->nr_packets == 0 mean if network backend can send
>> packet through hubport1 to guest.
>> Their direction is different.
>> So i don't understand why to need
>> "port->nr_packets == 0 for all ports"?
>
> For simplicity. Yes, this means hubs will be half-duplex. In practice
> I don't think you need to care.
>
> If you want to make it full-duplex, you can keep the per-port counter
> and in can_receive check if all ports except this one has a zero
> nr_packets count. In other words, your can_receive method is backwards:
> a port can receive a packet if all of its sibling ports are ready to
> receive it.
>
> Don't think of it in terms of "directions". It is not correct, because
> it is a star topology. Think of it in terms of where the packets enter
> the hub, and where they are forwarded to.
>
>>> Probably you can move nr_packets to the hub itself rather than the port?
>> I think that the counter brings a lot of issues.
>
> I said already that it's not *necessary*. You're free to find another
> solution. Removing TODO comments and leaving the problem however is not
> a solution.
I like the words. I sent out v4 for this patch. In new version, i
define one new rule for hub port .can_receive().
anyway, thanks a lot for your comments. Have nice weekend!!
>
> Paolo
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 10:07 ` Stefan Hajnoczi
@ 2012-05-25 11:18 ` Markus Armbruster
2012-05-25 12:01 ` Stefan Hajnoczi
0 siblings, 1 reply; 52+ messages in thread
From: Markus Armbruster @ 2012-05-25 11:18 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: kvm, jan.kiszka, qemu-devel, Luiz Capitulino, zwu.kernel, wuzhy,
pbonzini
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> writes:
> On Thu, May 24, 2012 at 05:53:21PM -0300, Luiz Capitulino wrote:
>> On Fri, 25 May 2012 01:59:06 +0800
>> zwu.kernel@gmail.com wrote:
>>
>> > From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> >
>> > The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
>>
>> Honest question: does it really pay off to have this in qemu vs. using one of
>> the externaly available solutions?
>
> For typical KVM setups this feature will be unused.
>
> However, the legacy QEMU "vlan" feature does have a few uses:
>
> 1. It's how the "dump" netdev can be connected up with a guest NIC and
> host netdev. Create a hub, attach the guest NIC, attach the host
> netdev, and attach the dump netdev. This allows the dump netdev to
> see all traffic.
>
> 2. It lets you build virtual network segments. Several point-to-point
> connections can be brought together. Start 3 VMs connected by the
> "socket" netdev and have one of them use a hub. This may be
> inefficient but I wouldn't be surprised if there are people out there
> doing this.
Those people will find other, superior ways to do this once this
inefficient way is gone. We'd do them a favour, I'd say ;)
> The point of this patch series is to remove the special-case net.c code
> for the legacy "vlan" feature. Today's code makes it harder to
> implement a clean QOM model and is a burden for the net subsystem in
> general. This series takes the vlan functionality and puts it into a
> normal netdev - it extracts the feature from net.c.
Welcome improvement, but...
> (If we didn't care about backwards compatibility we could just drop
> vlans completely and rewrite the "dump" netdev to hook into the net.h
> API somehow.)
... is backward compatiblity really worth the extra net client?
Please excuse my ignorant question (I haven't studied the series): what
kind of backward compatiblity exactly do we get here? Command line:
-net option vlan still works? Or just semantic: whatever you could do
with vlans you can now do with hubs?
In case it's the latter: well, whatever you could do with vlans you can
already do with external software, can't you? Why is it worthwhile to
provide yet another way within QEMU?
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-24 20:34 ` Jan Kiszka
2012-05-25 0:48 ` Zhi Yong Wu
@ 2012-05-25 12:00 ` Zhi Yong Wu
2012-05-25 13:49 ` Jan Kiszka
1 sibling, 1 reply; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 12:00 UTC (permalink / raw)
To: Jan Kiszka
Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
stefanha@linux.vnet.ibm.com
On Fri, May 25, 2012 at 4:34 AM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-24 14:59, zwu.kernel@gmail.com wrote:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>> net.c | 7 ++++++-
>> net/hub.c | 2 +-
>> 2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/net.c b/net.c
>> index 61dc28d..79ac51f 100644
>> --- a/net.c
>> +++ b/net.c
>> @@ -887,6 +887,12 @@ static const struct {
>> },
>> },
>> #endif /* CONFIG_NET_BRIDGE */
>> + [NET_CLIENT_TYPE_HUB] = {
>> + .type = "hubport",
>> + .desc = {
>> + { /* end of list */ }
>> + },
>> + },
>> };
>>
>> int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>> @@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
>> NetClientState *nc, *peer;
>> net_client_type type;
>>
>> - monitor_printf(mon, "Devices not on any VLAN:\n");
>> QTAILQ_FOREACH(nc, &net_clients, next) {
>> peer = nc->peer;
>> type = nc->info->type;
>> diff --git a/net/hub.c b/net/hub.c
>> index 0cc385e..8a583ab 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
>> QLIST_FOREACH(hub, &hubs, next) {
>> monitor_printf(mon, "hub %u\n", hub->id);
>> QLIST_FOREACH(port, &hub->ports, next) {
>> - monitor_printf(mon, " port %u peer %s\n", port->id,
>> + monitor_printf(mon, " \\ %s\n",
>> port->nc.peer ? port->nc.peer->name : "<none>");
>> }
>> }
>
> I still do not agree with this formatting (peer -> hubport + hub ->
> abbreviated peers instead of just hub -> peers). But the series has a
> higher value than this, and we can fix on top - unless there is a need
> for another round anyway.
Can the following formatting let you be happy?
(qemu) info network
hub 1
\ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
\ user.1: type=user,net=10.0.2.0,restrict=off
\ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
hub 0
\ user.0: type=user,net=10.0.2.0,restrict=off
\ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
\ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
(qemu)
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 11:18 ` Markus Armbruster
@ 2012-05-25 12:01 ` Stefan Hajnoczi
2012-05-25 12:30 ` Markus Armbruster
2012-05-25 12:53 ` Luiz Capitulino
0 siblings, 2 replies; 52+ messages in thread
From: Stefan Hajnoczi @ 2012-05-25 12:01 UTC (permalink / raw)
To: Markus Armbruster
Cc: Stefan Hajnoczi, kvm, jan.kiszka, qemu-devel, Luiz Capitulino,
zwu.kernel, wuzhy, pbonzini
On Fri, May 25, 2012 at 12:18 PM, Markus Armbruster <armbru@redhat.com> wrote:
> Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> writes:
>
>> On Thu, May 24, 2012 at 05:53:21PM -0300, Luiz Capitulino wrote:
>>> On Fri, 25 May 2012 01:59:06 +0800
>>> zwu.kernel@gmail.com wrote:
>>>
>>> > From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>> >
>>> > The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
>>>
>>> Honest question: does it really pay off to have this in qemu vs. using one of
>>> the externaly available solutions?
>>
>> For typical KVM setups this feature will be unused.
>>
>> However, the legacy QEMU "vlan" feature does have a few uses:
>>
>> 1. It's how the "dump" netdev can be connected up with a guest NIC and
>> host netdev. Create a hub, attach the guest NIC, attach the host
>> netdev, and attach the dump netdev. This allows the dump netdev to
>> see all traffic.
>>
>> 2. It lets you build virtual network segments. Several point-to-point
>> connections can be brought together. Start 3 VMs connected by the
>> "socket" netdev and have one of them use a hub. This may be
>> inefficient but I wouldn't be surprised if there are people out there
>> doing this.
>
> Those people will find other, superior ways to do this once this
> inefficient way is gone. We'd do them a favour, I'd say ;)
>
>> The point of this patch series is to remove the special-case net.c code
>> for the legacy "vlan" feature. Today's code makes it harder to
>> implement a clean QOM model and is a burden for the net subsystem in
>> general. This series takes the vlan functionality and puts it into a
>> normal netdev - it extracts the feature from net.c.
>
> Welcome improvement, but...
>
>> (If we didn't care about backwards compatibility we could just drop
>> vlans completely and rewrite the "dump" netdev to hook into the net.h
>> API somehow.)
>
> ... is backward compatiblity really worth the extra net client?
>
> Please excuse my ignorant question (I haven't studied the series): what
> kind of backward compatiblity exactly do we get here? Command line:
> -net option vlan still works? Or just semantic: whatever you could do
> with vlans you can now do with hubs?
>
> In case it's the latter: well, whatever you could do with vlans you can
> already do with external software, can't you? Why is it worthwhile to
> provide yet another way within QEMU?
The aim is to keep the command-line vlan= syntax in tact. The hub
change is mostly internal.
I agree it would be nice to drop entirely but I don't feel happy doing
that to users who might have QEMU buried in scripts somewhere. One
day they upgrade packages and suddenly their stuff doesn't work
anymore.
Stefan
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 12:01 ` Stefan Hajnoczi
@ 2012-05-25 12:30 ` Markus Armbruster
2012-05-25 12:53 ` Luiz Capitulino
1 sibling, 0 replies; 52+ messages in thread
From: Markus Armbruster @ 2012-05-25 12:30 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Stefan Hajnoczi, kvm, jan.kiszka, qemu-devel, Luiz Capitulino,
zwu.kernel, wuzhy, pbonzini
Stefan Hajnoczi <stefanha@gmail.com> writes:
> On Fri, May 25, 2012 at 12:18 PM, Markus Armbruster <armbru@redhat.com> wrote:
>> Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> writes:
>>
>>> On Thu, May 24, 2012 at 05:53:21PM -0300, Luiz Capitulino wrote:
>>>> On Fri, 25 May 2012 01:59:06 +0800
>>>> zwu.kernel@gmail.com wrote:
>>>>
>>>> > From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>>> >
>>>> > The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
>>>>
>>>> Honest question: does it really pay off to have this in qemu vs. using one of
>>>> the externaly available solutions?
>>>
>>> For typical KVM setups this feature will be unused.
>>>
>>> However, the legacy QEMU "vlan" feature does have a few uses:
>>>
>>> 1. It's how the "dump" netdev can be connected up with a guest NIC and
>>> host netdev. Create a hub, attach the guest NIC, attach the host
>>> netdev, and attach the dump netdev. This allows the dump netdev to
>>> see all traffic.
>>>
>>> 2. It lets you build virtual network segments. Several point-to-point
>>> connections can be brought together. Start 3 VMs connected by the
>>> "socket" netdev and have one of them use a hub. This may be
>>> inefficient but I wouldn't be surprised if there are people out there
>>> doing this.
>>
>> Those people will find other, superior ways to do this once this
>> inefficient way is gone. We'd do them a favour, I'd say ;)
>>
>>> The point of this patch series is to remove the special-case net.c code
>>> for the legacy "vlan" feature. Today's code makes it harder to
>>> implement a clean QOM model and is a burden for the net subsystem in
>>> general. This series takes the vlan functionality and puts it into a
>>> normal netdev - it extracts the feature from net.c.
>>
>> Welcome improvement, but...
>>
>>> (If we didn't care about backwards compatibility we could just drop
>>> vlans completely and rewrite the "dump" netdev to hook into the net.h
>>> API somehow.)
>>
>> ... is backward compatiblity really worth the extra net client?
>>
>> Please excuse my ignorant question (I haven't studied the series): what
>> kind of backward compatiblity exactly do we get here? Command line:
>> -net option vlan still works? Or just semantic: whatever you could do
>> with vlans you can now do with hubs?
>>
>> In case it's the latter: well, whatever you could do with vlans you can
>> already do with external software, can't you? Why is it worthwhile to
>> provide yet another way within QEMU?
>
> The aim is to keep the command-line vlan= syntax in tact. The hub
> change is mostly internal.
So it's an extra net client plus somewhat baroque magic to select this
client when needed. And when the magic activates, performance suffers.
The initiated will expect that, but it'll likely baffle mere users.
We can document the issue, but mere users generally don't read
documentation.
> I agree it would be nice to drop entirely but I don't feel happy doing
> that to users who might have QEMU buried in scripts somewhere. One
> day they upgrade packages and suddenly their stuff doesn't work
> anymore.
The keywords is "might". Before we bend over backwards, I'd prefer to
see some evidence of anyone actually profiting from it.
Anyway, maintainer judgement call.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 0:47 ` Zhi Yong Wu
@ 2012-05-25 12:49 ` Luiz Capitulino
0 siblings, 0 replies; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 12:49 UTC (permalink / raw)
To: Zhi Yong Wu; +Cc: stefanha, kvm, jan.kiszka, qemu-devel, wuzhy, pbonzini
On Fri, 25 May 2012 08:47:18 +0800
Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
> On Fri, May 25, 2012 at 4:53 AM, Luiz Capitulino <lcapitulino@redhat.com> wrote:
> > On Fri, 25 May 2012 01:59:06 +0800
> > zwu.kernel@gmail.com wrote:
> >
> >> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> >>
> >> The patchset implements network hub stead of vlan. The main work was done by stefan, and i rebased it to latest QEMU upstream, did some testings and am responsible for pushing it to QEMU upstream.
> >
> > Honest question: does it really pay off to have this in qemu vs. using one of
> It's said that it can speed up packets delivery, but i have not do
> every bechmark testings.
> For more details, please refer to
> http://thread.gmane.org/gmane.comp.emulators.qemu/133362
> > the externaly available solutions?
> Is there external available solutions?:), What are they? Open vSwitch?
I _guess_ that for non-linux unices we have only vde (do bsds have a tap
interface that can be used like we use it in linux?). For Linux we also vde,
openvswitch and macvtap in bridge mode.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 12:01 ` Stefan Hajnoczi
2012-05-25 12:30 ` Markus Armbruster
@ 2012-05-25 12:53 ` Luiz Capitulino
2012-05-25 12:59 ` Paolo Bonzini
2012-06-04 4:56 ` Anthony Liguori
1 sibling, 2 replies; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 12:53 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Stefan Hajnoczi, kvm, jan.kiszka, qemu-devel, Markus Armbruster,
zwu.kernel, wuzhy, pbonzini
On Fri, 25 May 2012 13:01:37 +0100
Stefan Hajnoczi <stefanha@gmail.com> wrote:
> I agree it would be nice to drop entirely but I don't feel happy doing
> that to users who might have QEMU buried in scripts somewhere. One
> day they upgrade packages and suddenly their stuff doesn't work
> anymore.
This is very similar to kqemu and I don't think we regret having dropped it.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 12:53 ` Luiz Capitulino
@ 2012-05-25 12:59 ` Paolo Bonzini
2012-05-25 13:07 ` Luiz Capitulino
2012-06-04 4:56 ` Anthony Liguori
1 sibling, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 12:59 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
Il 25/05/2012 14:53, Luiz Capitulino ha scritto:
>> > I agree it would be nice to drop entirely but I don't feel happy doing
>> > that to users who might have QEMU buried in scripts somewhere. One
>> > day they upgrade packages and suddenly their stuff doesn't work
>> > anymore.
> This is very similar to kqemu and I don't think we regret having dropped it.
It's not. kqemu was putting maintainance burden, the aim of this patch
is exactly to isolate the feature to command-line parsing and a magic
net client. If you don't use -net, the new code is absolutely dead,
unlike kqemu.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 12:59 ` Paolo Bonzini
@ 2012-05-25 13:07 ` Luiz Capitulino
2012-05-25 13:14 ` Paolo Bonzini
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 13:07 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
On Fri, 25 May 2012 14:59:25 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 14:53, Luiz Capitulino ha scritto:
> >> > I agree it would be nice to drop entirely but I don't feel happy doing
> >> > that to users who might have QEMU buried in scripts somewhere. One
> >> > day they upgrade packages and suddenly their stuff doesn't work
> >> > anymore.
> > This is very similar to kqemu and I don't think we regret having dropped it.
>
> It's not. kqemu was putting maintainance burden, the aim of this patch
> is exactly to isolate the feature to command-line parsing and a magic
> net client. If you don't use -net, the new code is absolutely dead,
> unlike kqemu.
Let me quote Stefan on this thread:
"""
The point of this patch series is to remove the special-case net.c code
for the legacy "vlan" feature. Today's code makes it harder to
implement a clean QOM model and is a burden for the net subsystem in
general
"""
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:07 ` Luiz Capitulino
@ 2012-05-25 13:14 ` Paolo Bonzini
2012-05-25 13:18 ` Luiz Capitulino
0 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 13:14 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
Il 25/05/2012 15:07, Luiz Capitulino ha scritto:
> On Fri, 25 May 2012 14:59:25 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
>
>> Il 25/05/2012 14:53, Luiz Capitulino ha scritto:
>>>>> I agree it would be nice to drop entirely but I don't feel happy doing
>>>>> that to users who might have QEMU buried in scripts somewhere. One
>>>>> day they upgrade packages and suddenly their stuff doesn't work
>>>>> anymore.
>>> This is very similar to kqemu and I don't think we regret having dropped it.
>>
>> It's not. kqemu was putting maintainance burden, the aim of this patch
>> is exactly to isolate the feature to command-line parsing and a magic
>> net client. If you don't use -net, the new code is absolutely dead,
>> unlike kqemu.
>
> Let me quote Stefan on this thread:
>
> """
> The point of this patch series is to remove the special-case net.c code
> for the legacy "vlan" feature. Today's code makes it harder to
> implement a clean QOM model and is a burden for the net subsystem in
> general
> """
Still not sure what you mean... we removed kqemu and didn't give an
alternative. This time we are providing an alternative.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:14 ` Paolo Bonzini
@ 2012-05-25 13:18 ` Luiz Capitulino
2012-05-25 13:19 ` Paolo Bonzini
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 13:18 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
On Fri, 25 May 2012 15:14:39 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 15:07, Luiz Capitulino ha scritto:
> > On Fri, 25 May 2012 14:59:25 +0200
> > Paolo Bonzini <pbonzini@redhat.com> wrote:
> >
> >> Il 25/05/2012 14:53, Luiz Capitulino ha scritto:
> >>>>> I agree it would be nice to drop entirely but I don't feel happy doing
> >>>>> that to users who might have QEMU buried in scripts somewhere. One
> >>>>> day they upgrade packages and suddenly their stuff doesn't work
> >>>>> anymore.
> >>> This is very similar to kqemu and I don't think we regret having dropped it.
> >>
> >> It's not. kqemu was putting maintainance burden, the aim of this patch
> >> is exactly to isolate the feature to command-line parsing and a magic
> >> net client. If you don't use -net, the new code is absolutely dead,
> >> unlike kqemu.
> >
> > Let me quote Stefan on this thread:
> >
> > """
> > The point of this patch series is to remove the special-case net.c code
> > for the legacy "vlan" feature. Today's code makes it harder to
> > implement a clean QOM model and is a burden for the net subsystem in
> > general
> > """
>
> Still not sure what you mean...
I meant it's a similar case. kqemu was a special case and maintenance burden.
We've dropped it and didn't regret. What's stopping us from doing the same
thing with vlans?
> we removed kqemu and didn't give an
> alternative. This time we are providing an alternative.
Alternatives already exist, we don't have to provide them.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:18 ` Luiz Capitulino
@ 2012-05-25 13:19 ` Paolo Bonzini
2012-05-25 13:30 ` Luiz Capitulino
0 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 13:19 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
Il 25/05/2012 15:18, Luiz Capitulino ha scritto:
>> >
>> > Still not sure what you mean...
> I meant it's a similar case. kqemu was a special case and maintenance burden.
> We've dropped it and didn't regret. What's stopping us from doing the same
> thing with vlans?
That we have an alternative, and that -net dump is actually useful.
>> > we removed kqemu and didn't give an
>> > alternative. This time we are providing an alternative.
> Alternatives already exist, we don't have to provide them.
Alternatives that require you to have root privileges (anything
involving libvirt or iptables) are not really alternatives.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:19 ` Paolo Bonzini
@ 2012-05-25 13:30 ` Luiz Capitulino
2012-05-25 13:37 ` Paolo Bonzini
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 13:30 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
On Fri, 25 May 2012 15:19:28 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 15:18, Luiz Capitulino ha scritto:
> >> >
> >> > Still not sure what you mean...
> > I meant it's a similar case. kqemu was a special case and maintenance burden.
> > We've dropped it and didn't regret. What's stopping us from doing the same
> > thing with vlans?
>
> That we have an alternative, and that -net dump is actually useful.
I haven't reviewed the series yet, but -net dump can work without this,
can't it?
It's always possible to have alternatives in qemu, the point is how far
we're going on bloating it.
> >> > we removed kqemu and didn't give an
> >> > alternative. This time we are providing an alternative.
> > Alternatives already exist, we don't have to provide them.
>
> Alternatives that require you to have root privileges (anything
> involving libvirt or iptables) are not really alternatives.
It seems to me that vde doesn't require root, but even if it does, moving
this outside of qemu would also be feasible.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:30 ` Luiz Capitulino
@ 2012-05-25 13:37 ` Paolo Bonzini
2012-05-25 13:43 ` Luiz Capitulino
0 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 13:37 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
Il 25/05/2012 15:30, Luiz Capitulino ha scritto:
> On Fri, 25 May 2012 15:19:28 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
>
>> Il 25/05/2012 15:18, Luiz Capitulino ha scritto:
>>>>>
>>>>> Still not sure what you mean...
>>> I meant it's a similar case. kqemu was a special case and maintenance burden.
>>> We've dropped it and didn't regret. What's stopping us from doing the same
>>> thing with vlans?
>>
>> That we have an alternative, and that -net dump is actually useful.
>
> I haven't reviewed the series yet, but -net dump can work without this,
> can't it?
-net dump requires putting a back-end, a front-end and the dump client
in the same VLAN. So it is quite useless without this.
> It's always possible to have alternatives in qemu, the point is how far
> we're going on bloating it.
>
>>>>> we removed kqemu and didn't give an
>>>>> alternative. This time we are providing an alternative.
>>> Alternatives already exist, we don't have to provide them.
>>
>> Alternatives that require you to have root privileges (anything
>> involving libvirt or iptables) are not really alternatives.
>
> It seems to me that vde doesn't require root, but even if it does, moving
> this outside of qemu would also be feasible.
Yeah, VDE probably includes something like an hub. But then we could
drop even "-net socket", "-net udp", "-net dump", and only leave in
vde+tap+slirp. Or even move slirp into VDE. :) That's a very different
thing.
Do distributions package VDE at all?
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:37 ` Paolo Bonzini
@ 2012-05-25 13:43 ` Luiz Capitulino
2012-05-25 13:47 ` Paolo Bonzini
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 13:43 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
On Fri, 25 May 2012 15:37:15 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 15:30, Luiz Capitulino ha scritto:
> > On Fri, 25 May 2012 15:19:28 +0200
> > Paolo Bonzini <pbonzini@redhat.com> wrote:
> >
> >> Il 25/05/2012 15:18, Luiz Capitulino ha scritto:
> >>>>>
> >>>>> Still not sure what you mean...
> >>> I meant it's a similar case. kqemu was a special case and maintenance burden.
> >>> We've dropped it and didn't regret. What's stopping us from doing the same
> >>> thing with vlans?
> >>
> >> That we have an alternative, and that -net dump is actually useful.
> >
> > I haven't reviewed the series yet, but -net dump can work without this,
> > can't it?
>
> -net dump requires putting a back-end, a front-end and the dump client
> in the same VLAN. So it is quite useless without this.
VDE allows this too :)
> > It's always possible to have alternatives in qemu, the point is how far
> > we're going on bloating it.
> >
> >>>>> we removed kqemu and didn't give an
> >>>>> alternative. This time we are providing an alternative.
> >>> Alternatives already exist, we don't have to provide them.
> >>
> >> Alternatives that require you to have root privileges (anything
> >> involving libvirt or iptables) are not really alternatives.
> >
> > It seems to me that vde doesn't require root, but even if it does, moving
> > this outside of qemu would also be feasible.
>
> Yeah, VDE probably includes something like an hub. But then we could
> drop even "-net socket", "-net udp", "-net dump", and only leave in
> vde+tap+slirp. Or even move slirp into VDE. :) That's a very different
> thing.
Let's start with what is hurting us.
> Do distributions package VDE at all?
I'm not sure. But note that openvswitch is a better alternative for linux.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:43 ` Luiz Capitulino
@ 2012-05-25 13:47 ` Paolo Bonzini
2012-05-25 13:56 ` Luiz Capitulino
0 siblings, 1 reply; 52+ messages in thread
From: Paolo Bonzini @ 2012-05-25 13:47 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
Il 25/05/2012 15:43, Luiz Capitulino ha scritto:
>> Yeah, VDE probably includes something like an hub. But then we could
>> drop even "-net socket", "-net udp", "-net dump", and only leave in
>> vde+tap+slirp. Or even move slirp into VDE. :) That's a very different
>> thing.
>
> Let's start with what is hurting us.
But is it? The patch makes it quite clean.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-25 12:00 ` Zhi Yong Wu
@ 2012-05-25 13:49 ` Jan Kiszka
2012-05-25 13:58 ` Zhi Yong Wu
0 siblings, 1 reply; 52+ messages in thread
From: Jan Kiszka @ 2012-05-25 13:49 UTC (permalink / raw)
To: Zhi Yong Wu
Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
stefanha@linux.vnet.ibm.com
On 2012-05-25 09:00, Zhi Yong Wu wrote:
> On Fri, May 25, 2012 at 4:34 AM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>> On 2012-05-24 14:59, zwu.kernel@gmail.com wrote:
>>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>>
>>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>> ---
>>> net.c | 7 ++++++-
>>> net/hub.c | 2 +-
>>> 2 files changed, 7 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/net.c b/net.c
>>> index 61dc28d..79ac51f 100644
>>> --- a/net.c
>>> +++ b/net.c
>>> @@ -887,6 +887,12 @@ static const struct {
>>> },
>>> },
>>> #endif /* CONFIG_NET_BRIDGE */
>>> + [NET_CLIENT_TYPE_HUB] = {
>>> + .type = "hubport",
>>> + .desc = {
>>> + { /* end of list */ }
>>> + },
>>> + },
>>> };
>>>
>>> int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>>> @@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
>>> NetClientState *nc, *peer;
>>> net_client_type type;
>>>
>>> - monitor_printf(mon, "Devices not on any VLAN:\n");
>>> QTAILQ_FOREACH(nc, &net_clients, next) {
>>> peer = nc->peer;
>>> type = nc->info->type;
>>> diff --git a/net/hub.c b/net/hub.c
>>> index 0cc385e..8a583ab 100644
>>> --- a/net/hub.c
>>> +++ b/net/hub.c
>>> @@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
>>> QLIST_FOREACH(hub, &hubs, next) {
>>> monitor_printf(mon, "hub %u\n", hub->id);
>>> QLIST_FOREACH(port, &hub->ports, next) {
>>> - monitor_printf(mon, " port %u peer %s\n", port->id,
>>> + monitor_printf(mon, " \\ %s\n",
>>> port->nc.peer ? port->nc.peer->name : "<none>");
>>> }
>>> }
>>
>> I still do not agree with this formatting (peer -> hubport + hub ->
>> abbreviated peers instead of just hub -> peers). But the series has a
>> higher value than this, and we can fix on top - unless there is a need
>> for another round anyway.
> Can the following formatting let you be happy?
>
> (qemu) info network
> hub 1
> \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
> \ user.1: type=user,net=10.0.2.0,restrict=off
> \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
> hub 0
> \ user.0: type=user,net=10.0.2.0,restrict=off
> \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
> \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
Yes, this is what I was propose. You can just save the peer indentions
in the hub case.
Thanks!
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:47 ` Paolo Bonzini
@ 2012-05-25 13:56 ` Luiz Capitulino
2012-05-28 11:17 ` Stefan Hajnoczi
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-25 13:56 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka
On Fri, 25 May 2012 15:47:28 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 25/05/2012 15:43, Luiz Capitulino ha scritto:
> >> Yeah, VDE probably includes something like an hub. But then we could
> >> drop even "-net socket", "-net udp", "-net dump", and only leave in
> >> vde+tap+slirp. Or even move slirp into VDE. :) That's a very different
> >> thing.
> >
> > Let's start with what is hurting us.
>
> But is it? The patch makes it quite clean.
vlan is and the cleanest solution is to drop it.
But that's just my opnion, I won't (and possibly can't) nack this.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info
2012-05-25 13:49 ` Jan Kiszka
@ 2012-05-25 13:58 ` Zhi Yong Wu
0 siblings, 0 replies; 52+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 13:58 UTC (permalink / raw)
To: Jan Kiszka
Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
stefanha@linux.vnet.ibm.com
On Fri, May 25, 2012 at 9:49 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-25 09:00, Zhi Yong Wu wrote:
>> On Fri, May 25, 2012 at 4:34 AM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>> On 2012-05-24 14:59, zwu.kernel@gmail.com wrote:
>>>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>>>
>>>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>>> ---
>>>> net.c | 7 ++++++-
>>>> net/hub.c | 2 +-
>>>> 2 files changed, 7 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/net.c b/net.c
>>>> index 61dc28d..79ac51f 100644
>>>> --- a/net.c
>>>> +++ b/net.c
>>>> @@ -887,6 +887,12 @@ static const struct {
>>>> },
>>>> },
>>>> #endif /* CONFIG_NET_BRIDGE */
>>>> + [NET_CLIENT_TYPE_HUB] = {
>>>> + .type = "hubport",
>>>> + .desc = {
>>>> + { /* end of list */ }
>>>> + },
>>>> + },
>>>> };
>>>>
>>>> int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>>>> @@ -1079,7 +1085,6 @@ void do_info_network(Monitor *mon)
>>>> NetClientState *nc, *peer;
>>>> net_client_type type;
>>>>
>>>> - monitor_printf(mon, "Devices not on any VLAN:\n");
>>>> QTAILQ_FOREACH(nc, &net_clients, next) {
>>>> peer = nc->peer;
>>>> type = nc->info->type;
>>>> diff --git a/net/hub.c b/net/hub.c
>>>> index 0cc385e..8a583ab 100644
>>>> --- a/net/hub.c
>>>> +++ b/net/hub.c
>>>> @@ -193,7 +193,7 @@ void net_hub_info(Monitor *mon)
>>>> QLIST_FOREACH(hub, &hubs, next) {
>>>> monitor_printf(mon, "hub %u\n", hub->id);
>>>> QLIST_FOREACH(port, &hub->ports, next) {
>>>> - monitor_printf(mon, " port %u peer %s\n", port->id,
>>>> + monitor_printf(mon, " \\ %s\n",
>>>> port->nc.peer ? port->nc.peer->name : "<none>");
>>>> }
>>>> }
>>>
>>> I still do not agree with this formatting (peer -> hubport + hub ->
>>> abbreviated peers instead of just hub -> peers). But the series has a
>>> higher value than this, and we can fix on top - unless there is a need
>>> for another round anyway.
>> Can the following formatting let you be happy?
>>
>> (qemu) info network
>> hub 1
>> \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
>> \ user.1: type=user,net=10.0.2.0,restrict=off
>> \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
>> hub 0
>> \ user.0: type=user,net=10.0.2.0,restrict=off
>> \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
>> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>> \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
>
> Yes, this is what I was propose. You can just save the peer indentions
> in the hub case.
OK. sent out v4 for this patch.
>
> Thanks!
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux
--
Regards,
Zhi Yong Wu
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 13:56 ` Luiz Capitulino
@ 2012-05-28 11:17 ` Stefan Hajnoczi
2012-05-28 13:25 ` Luiz Capitulino
0 siblings, 1 reply; 52+ messages in thread
From: Stefan Hajnoczi @ 2012-05-28 11:17 UTC (permalink / raw)
To: Luiz Capitulino
Cc: kvm, jan.kiszka, qemu-devel, Markus Armbruster, zwu.kernel, wuzhy,
Stefan Hajnoczi, Paolo Bonzini
On Fri, May 25, 2012 at 10:56:28AM -0300, Luiz Capitulino wrote:
> On Fri, 25 May 2012 15:47:28 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> > Il 25/05/2012 15:43, Luiz Capitulino ha scritto:
> > >> Yeah, VDE probably includes something like an hub. But then we could
> > >> drop even "-net socket", "-net udp", "-net dump", and only leave in
> > >> vde+tap+slirp. Or even move slirp into VDE. :) That's a very different
> > >> thing.
> > >
> > > Let's start with what is hurting us.
> >
> > But is it? The patch makes it quite clean.
>
> vlan is and the cleanest solution is to drop it.
For the sake of the argument, here's what we'd need:
1. Patches to remove vlan completely from QEMU.
2. net/dump.c alternative.
Packet capture could be done like this:
-netdev tap,dump=capture.pcap,...
You specify the "dump" option on a netdev giving a filename to use for
the pcap file. The net/dump.c would need to be called from net.c or
maybe net/queue.c.
What we need to decide is whether it's okay to drop QEMU "VLANs"
completely and change dump command-line syntax?
I think vlan-hub doesn't hurt anyone because the code has been isolated
and we keep backwards compatibility. So I'd personally still go the
vlan-hub route for QEMU 1.x.
Stefan
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-28 11:17 ` Stefan Hajnoczi
@ 2012-05-28 13:25 ` Luiz Capitulino
[not found] ` <m3ehq3tne0.fsf@blackfin.pond.sub.org>
0 siblings, 1 reply; 52+ messages in thread
From: Luiz Capitulino @ 2012-05-28 13:25 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: kvm, jan.kiszka, qemu-devel, Markus Armbruster, zwu.kernel, wuzhy,
Stefan Hajnoczi, Paolo Bonzini
On Mon, 28 May 2012 12:17:04 +0100
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> wrote:
> What we need to decide is whether it's okay to drop QEMU "VLANs"
> completely and change dump command-line syntax?
I'd vote for dropping it.
> I think vlan-hub doesn't hurt anyone because the code has been isolated
> and we keep backwards compatibility. So I'd personally still go the
> vlan-hub route for QEMU 1.x.
Just to make it clear: I'm not against this series. I'm against having
the functionality in qemu. If we want to keep the functionality, then I
completely agree that this series is the way to go.
Having glanced at this series I think it's beyond comparison with the
current code...
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
[not found] ` <m3ehq3tne0.fsf@blackfin.pond.sub.org>
@ 2012-06-04 4:48 ` Anthony Liguori
2012-06-04 7:24 ` Markus Armbruster
0 siblings, 1 reply; 52+ messages in thread
From: Anthony Liguori @ 2012-06-04 4:48 UTC (permalink / raw)
To: Markus Armbruster
Cc: Stefan Hajnoczi, kvm, jan.kiszka, qemu-devel, Luiz Capitulino,
zwu.kernel, wuzhy, Stefan Hajnoczi, Paolo Bonzini
On 05/29/2012 04:14 PM, Markus Armbruster wrote:
> Luiz Capitulino<lcapitulino@redhat.com> writes:
>
>> On Mon, 28 May 2012 12:17:04 +0100
>> Stefan Hajnoczi<stefanha@linux.vnet.ibm.com> wrote:
>>
>>> What we need to decide is whether it's okay to drop QEMU "VLANs"
>>> completely and change dump command-line syntax?
>>
>> I'd vote for dropping it.
>>
>>> I think vlan-hub doesn't hurt anyone because the code has been isolated
>>> and we keep backwards compatibility. So I'd personally still go the
>>> vlan-hub route for QEMU 1.x.
>>
>> Just to make it clear: I'm not against this series. I'm against having
>> the functionality in qemu. If we want to keep the functionality, then I
>> completely agree that this series is the way to go.
>
> I agree with Luiz: if we want to reimplement that much of networking
> within QEMU, this series does it in a much better way than VLANs, but
> I'd rather not do it at all.
>
> Just advice, not a strong objection.
Doesn't the same logic apply to reimplementing file systems? Shouldn't we drop
qcow3 in favor of using btrfs?
It's easy to make the NIH argument when it's a feature you don't care about.
A lot of people use vlans. It's the only way -net socket is useful too. Just
because most KVM/libvirt users don't doesn't mean they aren't an important
feature to preserve.
I would strongly nack any attempt to remove vlans w/o providing some mechanism
for backwards compatibility which is exactly what this patch series does.
Regards,
Anthony Liguori
>
> [...]
>
>
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-05-25 12:53 ` Luiz Capitulino
2012-05-25 12:59 ` Paolo Bonzini
@ 2012-06-04 4:56 ` Anthony Liguori
2012-06-04 13:09 ` Luiz Capitulino
1 sibling, 1 reply; 52+ messages in thread
From: Anthony Liguori @ 2012-06-04 4:56 UTC (permalink / raw)
To: Luiz Capitulino
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka, pbonzini
On 05/25/2012 08:53 PM, Luiz Capitulino wrote:
> On Fri, 25 May 2012 13:01:37 +0100
> Stefan Hajnoczi<stefanha@gmail.com> wrote:
>
>> I agree it would be nice to drop entirely but I don't feel happy doing
>> that to users who might have QEMU buried in scripts somewhere. One
>> day they upgrade packages and suddenly their stuff doesn't work
>> anymore.
>
> This is very similar to kqemu and I don't think we regret having dropped it.
You couldn't imagine the number of complaints I got from users about dropping
kqemu. It caused me considerable pain. Complaints ranged from down right
hostile (I had to involve the Launchpad admins at one point because of a
particular user) to entirely sympathetic.
kqemu wasn't just a maintenance burden, it was preventing large guest memory
support in KVM guests. There was no simple way around it without breaking kqemu
ABI and making significant changes to the kqemu module.
Dropping features is only something that should be approached lightly and
certainly not something that should be done just because you don't like a
particular bit of code.
Regards,
Anthony Liguori
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-06-04 4:48 ` Anthony Liguori
@ 2012-06-04 7:24 ` Markus Armbruster
0 siblings, 0 replies; 52+ messages in thread
From: Markus Armbruster @ 2012-06-04 7:24 UTC (permalink / raw)
To: Anthony Liguori
Cc: Stefan Hajnoczi, kvm, jan.kiszka, qemu-devel, Luiz Capitulino,
zwu.kernel, wuzhy, Stefan Hajnoczi, Paolo Bonzini
Anthony Liguori <anthony@codemonkey.ws> writes:
> On 05/29/2012 04:14 PM, Markus Armbruster wrote:
>> Luiz Capitulino<lcapitulino@redhat.com> writes:
>>
>>> On Mon, 28 May 2012 12:17:04 +0100
>>> Stefan Hajnoczi<stefanha@linux.vnet.ibm.com> wrote:
>>>
>>>> What we need to decide is whether it's okay to drop QEMU "VLANs"
>>>> completely and change dump command-line syntax?
>>>
>>> I'd vote for dropping it.
>>>
>>>> I think vlan-hub doesn't hurt anyone because the code has been isolated
>>>> and we keep backwards compatibility. So I'd personally still go the
>>>> vlan-hub route for QEMU 1.x.
>>>
>>> Just to make it clear: I'm not against this series. I'm against having
>>> the functionality in qemu. If we want to keep the functionality, then I
>>> completely agree that this series is the way to go.
>>
>> I agree with Luiz: if we want to reimplement that much of networking
>> within QEMU, this series does it in a much better way than VLANs, but
>> I'd rather not do it at all.
>>
>> Just advice, not a strong objection.
>
> Doesn't the same logic apply to reimplementing file systems?
> Shouldn't we drop qcow3 in favor of using btrfs?
btrfs isn't ready for production, so this is a hypothetical question.
> It's easy to make the NIH argument when it's a feature you don't care about.
>
> A lot of people use vlans. It's the only way -net socket is useful
> too. Just because most KVM/libvirt users don't doesn't mean they
> aren't an important feature to preserve.
I specifically asked for evidence on actual use of VLANs, and which uses
of VLANs can't be readily upgraded to better-performing external
solutions. You asserting it is used "a lot" isn't a full answer, but
it's (slightly) better than nothing.
> I would strongly nack any attempt to remove vlans w/o providing some
> mechanism for backwards compatibility which is exactly what this patch
> series does.
Roma locuta, causa finita.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [PATCH v3 00/16] net: hub-based networking
2012-06-04 4:56 ` Anthony Liguori
@ 2012-06-04 13:09 ` Luiz Capitulino
0 siblings, 0 replies; 52+ messages in thread
From: Luiz Capitulino @ 2012-06-04 13:09 UTC (permalink / raw)
To: Anthony Liguori
Cc: Stefan Hajnoczi, kvm, Stefan Hajnoczi, qemu-devel,
Markus Armbruster, zwu.kernel, wuzhy, jan.kiszka, pbonzini
On Mon, 04 Jun 2012 12:56:41 +0800
Anthony Liguori <anthony@codemonkey.ws> wrote:
> On 05/25/2012 08:53 PM, Luiz Capitulino wrote:
> > On Fri, 25 May 2012 13:01:37 +0100
> > Stefan Hajnoczi<stefanha@gmail.com> wrote:
> >
> >> I agree it would be nice to drop entirely but I don't feel happy doing
> >> that to users who might have QEMU buried in scripts somewhere. One
> >> day they upgrade packages and suddenly their stuff doesn't work
> >> anymore.
> >
> > This is very similar to kqemu and I don't think we regret having dropped it.
>
> You couldn't imagine the number of complaints I got from users about dropping
> kqemu. It caused me considerable pain. Complaints ranged from down right
> hostile (I had to involve the Launchpad admins at one point because of a
> particular user) to entirely sympathetic.
>
> kqemu wasn't just a maintenance burden, it was preventing large guest memory
> support in KVM guests. There was no simple way around it without breaking kqemu
> ABI and making significant changes to the kqemu module.
>
> Dropping features is only something that should be approached lightly and
> certainly not something that should be done just because you don't like a
> particular bit of code.
It's not just because I don't like the code. Afaik, there are better external
tools that seem to do exact the same thing (and even seem to do it better)
But as Markus said in the other thread, it's just advice, not strong objection.
^ permalink raw reply [flat|nested] 52+ messages in thread
end of thread, other threads:[~2012-06-04 13:10 UTC | newest]
Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-24 17:59 [Qemu-devel] [PATCH v3 00/16] net: hub-based networking zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 01/16] net: Add a hub net client zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 02/16] net: Use hubs for the vlan feature zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 04/16] hub: Check that hubs are configured correctly zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 06/16] net: Remove vlan qdev property zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 07/16] net: Remove vlan code from net.c zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 08/16] net: Remove VLANState zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 11/16] net: Rename vc local variables to nc zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 13/16] net: Make the monitor output more reasonable hub info zwu.kernel
2012-05-24 20:34 ` Jan Kiszka
2012-05-25 0:48 ` Zhi Yong Wu
2012-05-25 12:00 ` Zhi Yong Wu
2012-05-25 13:49 ` Jan Kiszka
2012-05-25 13:58 ` Zhi Yong Wu
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
2012-05-24 17:59 ` [Qemu-devel] [PATCH v3 16/16] hub: add the support for hub own flow control zwu.kernel
2012-05-25 7:04 ` Paolo Bonzini
2012-05-25 7:48 ` Zhi Yong Wu
2012-05-25 10:08 ` Paolo Bonzini
2012-05-25 10:54 ` Zhi Yong Wu
2012-05-25 8:04 ` Zhi Yong Wu
2012-05-25 8:18 ` Zhi Yong Wu
2012-05-24 20:53 ` [Qemu-devel] [PATCH v3 00/16] net: hub-based networking Luiz Capitulino
2012-05-25 0:47 ` Zhi Yong Wu
2012-05-25 12:49 ` Luiz Capitulino
2012-05-25 10:07 ` Stefan Hajnoczi
2012-05-25 11:18 ` Markus Armbruster
2012-05-25 12:01 ` Stefan Hajnoczi
2012-05-25 12:30 ` Markus Armbruster
2012-05-25 12:53 ` Luiz Capitulino
2012-05-25 12:59 ` Paolo Bonzini
2012-05-25 13:07 ` Luiz Capitulino
2012-05-25 13:14 ` Paolo Bonzini
2012-05-25 13:18 ` Luiz Capitulino
2012-05-25 13:19 ` Paolo Bonzini
2012-05-25 13:30 ` Luiz Capitulino
2012-05-25 13:37 ` Paolo Bonzini
2012-05-25 13:43 ` Luiz Capitulino
2012-05-25 13:47 ` Paolo Bonzini
2012-05-25 13:56 ` Luiz Capitulino
2012-05-28 11:17 ` Stefan Hajnoczi
2012-05-28 13:25 ` Luiz Capitulino
[not found] ` <m3ehq3tne0.fsf@blackfin.pond.sub.org>
2012-06-04 4:48 ` Anthony Liguori
2012-06-04 7:24 ` Markus Armbruster
2012-06-04 4:56 ` Anthony Liguori
2012-06-04 13:09 ` Luiz Capitulino
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).