From f6c874e3002b944f83d887b84051654e5c5b7821 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:04 +0100 Subject: net: Add a hub net client 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index dbca77bad1..e7a8d81591 100644 --- a/net.c +++ b/net.c @@ -30,6 +30,7 @@ #include "net/dump.h" #include "net/slirp.h" #include "net/vde.h" +#include "net/hub.h" #include "net/util.h" #include "monitor.h" #include "qemu-common.h" @@ -816,19 +817,20 @@ static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])( const NetClientOptions *opts, const char *name, VLANState *vlan) = { - [NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic, + [NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic, #ifdef CONFIG_SLIRP - [NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp, + [NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp, #endif - [NET_CLIENT_OPTIONS_KIND_TAP] = net_init_tap, - [NET_CLIENT_OPTIONS_KIND_SOCKET] = net_init_socket, + [NET_CLIENT_OPTIONS_KIND_TAP] = net_init_tap, + [NET_CLIENT_OPTIONS_KIND_SOCKET] = net_init_socket, #ifdef CONFIG_VDE - [NET_CLIENT_OPTIONS_KIND_VDE] = net_init_vde, + [NET_CLIENT_OPTIONS_KIND_VDE] = net_init_vde, #endif - [NET_CLIENT_OPTIONS_KIND_DUMP] = net_init_dump, + [NET_CLIENT_OPTIONS_KIND_DUMP] = net_init_dump, #ifdef CONFIG_NET_BRIDGE - [NET_CLIENT_OPTIONS_KIND_BRIDGE] = net_init_bridge, + [NET_CLIENT_OPTIONS_KIND_BRIDGE] = net_init_bridge, #endif + [NET_CLIENT_OPTIONS_KIND_HUBPORT] = net_init_hubport, }; @@ -858,6 +860,7 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp) #ifdef CONFIG_NET_BRIDGE case NET_CLIENT_OPTIONS_KIND_BRIDGE: #endif + case NET_CLIENT_OPTIONS_KIND_HUBPORT: break; default: -- cgit v1.2.3 From d33d93b2c40b820c2cfab1e2e6da631f12091957 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:05 +0100 Subject: net: Use hubs for the vlan feature 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index e7a8d81591..4feca6c0b9 100644 --- a/net.c +++ b/net.c @@ -157,23 +157,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++; } } @@ -750,7 +752,7 @@ int net_handle_fd_param(Monitor *mon, const char *param) } static int net_init_nic(const NetClientOptions *opts, const char *name, - VLANState *vlan) + VLANClientState *peer) { int idx; NICInfo *nd; @@ -776,8 +778,8 @@ static int net_init_nic(const NetClientOptions *opts, const char *name, return -1; } } else { - assert(vlan); - nd->vlan = vlan; + assert(peer); + nd->netdev = peer; } if (name) { nd->name = g_strdup(name); @@ -816,7 +818,7 @@ static int net_init_nic(const NetClientOptions *opts, const char *name, static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])( const NetClientOptions *opts, const char *name, - VLANState *vlan) = { + VLANClientState *peer) = { [NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic, #ifdef CONFIG_SLIRP [NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp, @@ -876,17 +878,17 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp) } if (net_client_init_fun[opts->kind]) { - VLANState *vlan = NULL; + VLANClientState *peer = NULL; /* Do not add to a vlan if it's a -netdev or a nic with a netdev= * parameter. */ if (!is_netdev && (opts->kind != NET_CLIENT_OPTIONS_KIND_NIC || !opts->nic->has_netdev)) { - vlan = qemu_find_vlan(u.net->has_vlan ? u.net->vlan : 0, true); + peer = net_hub_add_port(u.net->has_vlan ? u.net->vlan : 0, NULL); } - if (net_client_init_fun[opts->kind](opts, name, vlan) < 0) { + if (net_client_init_fun[opts->kind](opts, name, peer) < 0) { /* TODO push error reporting into init() methods */ error_set(errp, QERR_DEVICE_INIT_FAILED, NetClientOptionsKind_lookup[opts->kind]); @@ -1085,6 +1087,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) -- cgit v1.2.3 From 90d87a33c700e0634bc4343fa7a034f909662254 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:06 +0100 Subject: net: Look up 'vlan' net clients using hubs Signed-off-by: Stefan Hajnoczi Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 4feca6c0b9..f88d38d524 100644 --- a/net.c +++ b/net.c @@ -315,32 +315,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; @@ -994,7 +968,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; } -- cgit v1.2.3 From 81017645e45bcb0b4d985e900c501f92f2c6fb60 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:07 +0100 Subject: hub: Check that hubs are configured correctly 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index f88d38d524..413dac4ce9 100644 --- a/net.c +++ b/net.c @@ -1124,7 +1124,6 @@ void net_cleanup(void) void net_check_clients(void) { - VLANState *vlan; VLANClientState *vc; int i; @@ -1140,30 +1139,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_OPTIONS_KIND_NIC: - has_nic = 1; - break; - case NET_CLIENT_OPTIONS_KIND_USER: - case NET_CLIENT_OPTIONS_KIND_TAP: - case NET_CLIENT_OPTIONS_KIND_SOCKET: - case NET_CLIENT_OPTIONS_KIND_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", -- cgit v1.2.3 From ab5f3f84c4362c3014b1ecdb450f430d01b96f19 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:08 +0100 Subject: net: Drop vlan argument to qemu_new_net_client() 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 413dac4ce9..274f3bddd7 100644 --- a/net.c +++ b/net.c @@ -197,7 +197,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) @@ -216,22 +215,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; } @@ -248,7 +241,7 @@ NICState *qemu_new_nic(NetClientInfo *info, assert(info->type == NET_CLIENT_OPTIONS_KIND_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; -- cgit v1.2.3 From ec8b1f6cc8d0a5921fba93cd180b05328e537170 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:10 +0100 Subject: net: Remove vlan code from net.c The vlan implementation in net.c has been replaced by hubs so we can remove the code. Signed-off-by: Stefan Hajnoczi Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 108 ------------------------------------------------------------------ 1 file changed, 108 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 274f3bddd7..819fff7255 100644 --- a/net.c +++ b/net.c @@ -391,50 +391,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; @@ -541,42 +497,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) @@ -604,34 +524,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; -- cgit v1.2.3 From a005d0732fb1c8e419e506c94ea2527287fe4204 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:11 +0100 Subject: net: Remove VLANState VLANState is no longer used and can be removed. Signed-off-by: Stefan Hajnoczi Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 125 +++++++++++------------------------------------------------------- 1 file changed, 21 insertions(+), 104 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 819fff7255..ee75e0e2ea 100644 --- a/net.c +++ b/net.c @@ -47,7 +47,6 @@ # define CONFIG_NET_BRIDGE #endif -static QTAILQ_HEAD(, VLANState) vlans; static QTAILQ_HEAD(, VLANClientState) non_vlan_clients; int default_net = 1; @@ -252,11 +251,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); @@ -265,13 +260,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); @@ -281,7 +274,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_OPTIONS_KIND_NIC) { + if (vc->peer && vc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { NICState *nic = DO_UPCAST(NICState, nc, vc->peer); if (nic->peer_deleted) { return; @@ -297,7 +290,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_OPTIONS_KIND_NIC) { + if (vc->peer && vc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { NICState *nic = DO_UPCAST(NICState, nc, vc); if (nic->peer_deleted) { qemu_free_vlan_client(vc->peer); @@ -311,52 +304,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_OPTIONS_KIND_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_OPTIONS_KIND_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; } @@ -393,34 +359,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, @@ -435,15 +385,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); } @@ -503,15 +449,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, @@ -921,18 +863,9 @@ static void print_net_client(Monitor *mon, VLANClientState *vc) void do_info_network(Monitor *mon) { - VLANState *vlan; VLANClientState *vc, *peer; NetClientOptionsKind 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; @@ -951,16 +884,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; @@ -993,15 +918,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); } @@ -1090,7 +1008,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) -- cgit v1.2.3 From 94878994dcd5d7c2d9c3fe689d6841f6e7ddc2c2 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:12 +0100 Subject: net: Rename non_vlan_clients to net_clients 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index ee75e0e2ea..65b45bb994 100644 --- a/net.c +++ b/net.c @@ -47,7 +47,7 @@ # define CONFIG_NET_BRIDGE #endif -static QTAILQ_HEAD(, VLANClientState) non_vlan_clients; +static QTAILQ_HEAD(, VLANClientState) net_clients; int default_net = 1; @@ -168,7 +168,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; } @@ -219,7 +219,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, @@ -251,7 +251,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); @@ -305,7 +305,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_OPTIONS_KIND_NIC) { func(DO_UPCAST(NICState, nc, nc), opaque); } @@ -470,7 +470,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_OPTIONS_KIND_NIC) continue; if (!strcmp(vc->name, id)) { @@ -867,7 +867,7 @@ void do_info_network(Monitor *mon) NetClientOptionsKind 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_OPTIONS_KIND_NIC) { @@ -886,7 +886,7 @@ void qmp_set_link(const char *name, bool up, Error **errp) { VLANClientState *vc = NULL; - QTAILQ_FOREACH(vc, &non_vlan_clients, next) { + QTAILQ_FOREACH(vc, &net_clients, next) { if (!strcmp(vc->name, name)) { goto done; } @@ -920,7 +920,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); } } @@ -944,7 +944,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_OPTIONS_KIND_NIC ? "nic" : "netdev", @@ -1008,7 +1008,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; -- cgit v1.2.3 From 4e68f7a0819f179c2ff90a60611806c789911cc2 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:13 +0100 Subject: net: Rename VLANClientState to NetClientState 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 87 +++++++++++++++++++++++++++++++++---------------------------------- 1 file changed, 43 insertions(+), 44 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 65b45bb994..33896fe679 100644 --- a/net.c +++ b/net.c @@ -47,7 +47,7 @@ # define CONFIG_NET_BRIDGE #endif -static QTAILQ_HEAD(, VLANClientState) net_clients; +static QTAILQ_HEAD(, NetClientState) net_clients; int default_net = 1; @@ -132,7 +132,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", @@ -162,9 +162,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; @@ -184,25 +184,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); @@ -234,7 +234,7 @@ NICState *qemu_new_nic(NetClientInfo *info, const char *name, void *opaque) { - VLANClientState *nc; + NetClientState *nc; NICState *nic; assert(info->type == NET_CLIENT_OPTIONS_KIND_NIC); @@ -249,7 +249,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); @@ -258,7 +258,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); @@ -271,7 +271,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_OPTIONS_KIND_NIC) { @@ -303,7 +303,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_OPTIONS_KIND_NIC) { @@ -312,7 +312,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; @@ -327,13 +327,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) { @@ -357,7 +357,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; @@ -366,14 +366,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) @@ -394,7 +394,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) { @@ -402,18 +402,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]; @@ -424,13 +424,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); @@ -443,7 +443,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) { @@ -461,14 +461,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_OPTIONS_KIND_NIC) @@ -553,7 +553,7 @@ int net_handle_fd_param(Monitor *mon, const char *param) } static int net_init_nic(const NetClientOptions *opts, const char *name, - VLANClientState *peer) + NetClientState *peer) { int idx; NICInfo *nd; @@ -619,7 +619,7 @@ static int net_init_nic(const NetClientOptions *opts, const char *name, static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])( const NetClientOptions *opts, const char *name, - VLANClientState *peer) = { + NetClientState *peer) = { [NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic, #ifdef CONFIG_SLIRP [NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp, @@ -679,7 +679,7 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp) } if (net_client_init_fun[opts->kind]) { - VLANClientState *peer = NULL; + NetClientState *peer = NULL; /* Do not add to a vlan if it's a -netdev or a nic with a netdev= * parameter. */ @@ -791,7 +791,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"); @@ -843,7 +843,7 @@ exit_err: void qmp_netdev_del(const char *id, Error **errp) { - VLANClientState *vc; + NetClientState *vc; vc = qemu_find_netdev(id); if (!vc) { @@ -855,7 +855,7 @@ void qmp_netdev_del(const char *id, Error **errp) qemu_opts_del(qemu_opts_find(qemu_find_opts_err("netdev", errp), id)); } -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, NetClientOptionsKind_lookup[vc->info->type], vc->info_str); @@ -863,7 +863,7 @@ static void print_net_client(Monitor *mon, VLANClientState *vc) void do_info_network(Monitor *mon) { - VLANClientState *vc, *peer; + NetClientState *vc, *peer; NetClientOptionsKind type; monitor_printf(mon, "Devices not on any VLAN:\n"); @@ -884,7 +884,7 @@ void do_info_network(Monitor *mon) void qmp_set_link(const char *name, bool up, Error **errp) { - VLANClientState *vc = NULL; + NetClientState *vc = NULL; QTAILQ_FOREACH(vc, &net_clients, next) { if (!strcmp(vc->name, name)) { @@ -892,7 +892,6 @@ void qmp_set_link(const char *name, bool up, Error **errp) } } done: - if (!vc) { error_set(errp, QERR_DEVICE_NOT_FOUND, name); return; @@ -918,7 +917,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); @@ -927,7 +926,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 -- cgit v1.2.3 From 35277d14ece1a68dc45cbc8c5af8f469c5c49549 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:14 +0100 Subject: net: Rename vc local variables to nc 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 220 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 33896fe679..8aebf8cd48 100644 --- a/net.c +++ b/net.c @@ -132,11 +132,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]); } @@ -162,19 +162,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++; } } @@ -200,32 +200,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, @@ -249,56 +249,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_OPTIONS_KIND_NIC) { - NICState *nic = DO_UPCAST(NICState, nc, vc->peer); + if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_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_OPTIONS_KIND_NIC) { - NICState *nic = DO_UPCAST(NICState, nc, vc); + if (nc->peer && nc->info->type == NET_CLIENT_OPTIONS_KIND_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) @@ -333,44 +333,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, @@ -402,18 +402,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]; @@ -421,7 +421,7 @@ static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov, offset = iov_to_buf(iov, iovcnt, 0, buffer, 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, @@ -430,16 +430,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); } } @@ -461,20 +461,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_OPTIONS_KIND_NIC) + QTAILQ_FOREACH(nc, &net_clients, next) { + if (nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC) continue; - if (!strcmp(vc->name, id)) { - return vc; + if (!strcmp(nc->name, id)) { + return nc; } } @@ -791,19 +791,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); } void netdev_add(QemuOpts *opts, Error **errp) @@ -843,36 +843,36 @@ exit_err: void qmp_netdev_del(const char *id, Error **errp) { - NetClientState *vc; + NetClientState *nc; - vc = qemu_find_netdev(id); - if (!vc) { + nc = qemu_find_netdev(id); + if (!nc) { error_set(errp, QERR_DEVICE_NOT_FOUND, id); return; } - qemu_del_vlan_client(vc); + qemu_del_vlan_client(nc); qemu_opts_del(qemu_opts_find(qemu_find_opts_err("netdev", errp), id)); } -static void print_net_client(Monitor *mon, NetClientState *vc) +static void print_net_client(Monitor *mon, NetClientState *nc) { - monitor_printf(mon, "%s: type=%s,%s\n", vc->name, - NetClientOptionsKind_lookup[vc->info->type], vc->info_str); + monitor_printf(mon, "%s: type=%s,%s\n", nc->name, + NetClientOptionsKind_lookup[nc->info->type], nc->info_str); } void do_info_network(Monitor *mon) { - NetClientState *vc, *peer; + NetClientState *nc, *peer; NetClientOptionsKind 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_OPTIONS_KIND_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_OPTIONS_KIND_NIC) { monitor_printf(mon, " \\ "); @@ -884,23 +884,23 @@ void do_info_network(Monitor *mon) void qmp_set_link(const char *name, bool up, Error **errp) { - NetClientState *vc = NULL; + NetClientState *nc = NULL; - QTAILQ_FOREACH(vc, &net_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) { error_set(errp, 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 @@ -910,23 +910,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 @@ -943,11 +943,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_OPTIONS_KIND_NIC ? "nic" : "netdev", - vc->name); + nc->info->type == NET_CLIENT_OPTIONS_KIND_NIC ? + "nic" : "netdev", nc->name); } } -- cgit v1.2.3 From b20c6b9e47772b9162ed194e7b2884afa6a354ab Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 24 Jul 2012 16:35:15 +0100 Subject: net: Rename qemu_del_vlan_client() to qemu_del_net_client() 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 Signed-off-by: Zhi Yong Wu Reviewed-by: Laszlo Ersek --- net.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 8aebf8cd48..88ccb2efc0 100644 --- a/net.c +++ b/net.c @@ -249,7 +249,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); @@ -258,7 +258,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); @@ -271,7 +271,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_OPTIONS_KIND_NIC) { @@ -285,7 +285,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; } @@ -293,12 +293,12 @@ void qemu_del_vlan_client(NetClientState *nc) if (nc->peer && nc->info->type == NET_CLIENT_OPTIONS_KIND_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) @@ -803,7 +803,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); } void netdev_add(QemuOpts *opts, Error **errp) @@ -851,7 +851,7 @@ void qmp_netdev_del(const char *id, Error **errp) return; } - qemu_del_vlan_client(nc); + qemu_del_net_client(nc); qemu_opts_del(qemu_opts_find(qemu_find_opts_err("netdev", errp), id)); } @@ -920,7 +920,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); } } -- cgit v1.2.3 From 1a8595931ac6ffb76c2e10675ba3a39e807f02fd Mon Sep 17 00:00:00 2001 From: Zhi Yong Wu Date: Tue, 24 Jul 2012 16:35:16 +0100 Subject: net: Make "info network" output more readable info Reviewed-by: Jan Kiszka Signed-off-by: Zhi Yong Wu Signed-off-by: Stefan Hajnoczi Reviewed-by: Laszlo Ersek --- net.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 88ccb2efc0..7edb52b5c8 100644 --- a/net.c +++ b/net.c @@ -855,7 +855,7 @@ void qmp_netdev_del(const char *id, Error **errp) qemu_opts_del(qemu_opts_find(qemu_find_opts_err("netdev", errp), id)); } -static void print_net_client(Monitor *mon, NetClientState *nc) +void print_net_client(Monitor *mon, NetClientState *nc) { monitor_printf(mon, "%s: type=%s,%s\n", nc->name, NetClientOptionsKind_lookup[nc->info->type], nc->info_str); @@ -866,20 +866,25 @@ void do_info_network(Monitor *mon) NetClientState *nc, *peer; NetClientOptionsKind type; - monitor_printf(mon, "Devices not on any VLAN:\n"); + net_hub_info(mon); + QTAILQ_FOREACH(nc, &net_clients, next) { peer = nc->peer; type = nc->info->type; + + /* Skip if already printed in hub info */ + if (net_hub_id_for_client(nc, NULL) == 0) { + continue; + } + if (!peer || type == NET_CLIENT_OPTIONS_KIND_NIC) { - monitor_printf(mon, " "); print_net_client(mon, nc); } /* else it's a netdev connected to a NIC, printed with the NIC */ if (peer && type == NET_CLIENT_OPTIONS_KIND_NIC) { - monitor_printf(mon, " \\ "); + monitor_printf(mon, " \\ "); print_net_client(mon, peer); } } - net_hub_info(mon); } void qmp_set_link(const char *name, bool up, Error **errp) -- cgit v1.2.3 From 86a77c3858610a36f1409c657b1768727693d25b Mon Sep 17 00:00:00 2001 From: Zhi Yong Wu Date: Tue, 24 Jul 2012 16:35:17 +0100 Subject: net: cleanup deliver/deliver_iov func pointers Reviewed-by: Paolo Bonzini Signed-off-by: Zhi Yong Wu Signed-off-by: Stefan Hajnoczi Reviewed-by: Laszlo Ersek --- net.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 7edb52b5c8..98109e53b2 100644 --- a/net.c +++ b/net.c @@ -184,17 +184,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, @@ -221,9 +210,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; } @@ -327,11 +314,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; @@ -424,11 +411,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; -- cgit v1.2.3