From patchwork Wed Nov 25 18:49:30 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark McLoughlin X-Patchwork-Id: 39446 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 175CB1007D1 for ; Thu, 26 Nov 2009 06:56:14 +1100 (EST) Received: from localhost ([127.0.0.1]:60444 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NDNyE-00084V-Uy for incoming@patchwork.ozlabs.org; Wed, 25 Nov 2009 14:56:11 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NDMyo-0007TM-0w for qemu-devel@nongnu.org; Wed, 25 Nov 2009 13:52:42 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NDMya-0007Jm-Vy for qemu-devel@nongnu.org; Wed, 25 Nov 2009 13:52:37 -0500 Received: from [199.232.76.173] (port=49016 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NDMya-0007JH-Ab for qemu-devel@nongnu.org; Wed, 25 Nov 2009 13:52:28 -0500 Received: from mx20.gnu.org ([199.232.41.8]:32784) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NDMyZ-0000Fi-T8 for qemu-devel@nongnu.org; Wed, 25 Nov 2009 13:52:28 -0500 Received: from mx1.redhat.com ([209.132.183.28]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NDMyZ-0000Rn-2s for qemu-devel@nongnu.org; Wed, 25 Nov 2009 13:52:27 -0500 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nAPIqQ2E020215 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 25 Nov 2009 13:52:26 -0500 Received: from blaa.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nAPIqNiC026879; Wed, 25 Nov 2009 13:52:25 -0500 Received: by blaa.localdomain (Postfix, from userid 500) id 1EE2FB0B1; Wed, 25 Nov 2009 18:49:43 +0000 (GMT) From: Mark McLoughlin To: qemu-devel@nongnu.org Date: Wed, 25 Nov 2009 18:49:30 +0000 Message-Id: <1259174977-26212-38-git-send-email-markmc@redhat.com> In-Reply-To: <1259174977-26212-1-git-send-email-markmc@redhat.com> References: <1259174977-26212-1-git-send-email-markmc@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.16 X-detected-operating-system: by mx20.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: Mark McLoughlin Subject: [Qemu-devel] [PATCH 37/44] net: remove VLANClientState members now in NetClientInfo X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Add a NetClientInfo pointer to VLANClientState and use that for the typecode and function pointers. Signed-off-by: Mark McLoughlin --- hw/dp8393x.c | 4 ++-- hw/virtio-net.c | 2 +- net.c | 45 ++++++++++++++++++++------------------------- net.h | 10 +--------- net/tap.c | 6 +++--- 5 files changed, 27 insertions(+), 40 deletions(-) diff --git a/hw/dp8393x.c b/hw/dp8393x.c index be9714d..e65e4d1 100644 --- a/hw/dp8393x.c +++ b/hw/dp8393x.c @@ -407,9 +407,9 @@ static void do_transmit_packets(dp8393xState *s) if (s->regs[SONIC_RCR] & (SONIC_RCR_LB1 | SONIC_RCR_LB0)) { /* Loopback */ s->regs[SONIC_TCR] |= SONIC_TCR_CRSL; - if (s->nic->nc.can_receive(&s->nic->nc)) { + if (s->nic->nc.info->can_receive(&s->nic->nc)) { s->loopback_packet = 1; - s->nic->nc.receive(&s->nic->nc, s->tx_buffer, tx_len); + s->nic->nc.info->receive(&s->nic->nc, s->tx_buffer, tx_len); } } else { /* Transmit packet */ diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 4f8d89e..2f201ff 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -129,7 +129,7 @@ static int peer_has_vnet_hdr(VirtIONet *n) if (!n->nic->nc.peer) return 0; - if (n->nic->nc.peer->type != NET_CLIENT_TYPE_TAP) + if (n->nic->nc.peer->info->type != NET_CLIENT_TYPE_TAP) return 0; n->has_vnet_hdr = tap_has_vnet_hdr(n->nic->nc.peer); diff --git a/net.c b/net.c index d77320b..a1ec243 100644 --- a/net.c +++ b/net.c @@ -229,19 +229,13 @@ VLANClientState *qemu_new_net_client(NetClientInfo *info, vc = qemu_mallocz(info->size); - vc->type = info->type; + vc->info = info; vc->model = qemu_strdup(model); if (name) { vc->name = qemu_strdup(name); } else { vc->name = assign_name(vc, model); } - vc->can_receive = info->can_receive; - vc->receive = info->receive; - vc->receive_raw = info->receive_raw; - vc->receive_iov = info->receive_iov; - vc->cleanup = info->cleanup; - vc->link_status_changed = info->link_status_changed; if (vlan) { assert(!peer); @@ -297,8 +291,8 @@ void qemu_del_vlan_client(VLANClientState *vc) } } - if (vc->cleanup) { - vc->cleanup(vc); + if (vc->info->cleanup) { + vc->info->cleanup(vc); } qemu_free(vc->name); @@ -340,8 +334,8 @@ int qemu_can_send_packet(VLANClientState *sender) if (sender->peer) { if (sender->peer->receive_disabled) { return 0; - } else if (sender->peer->can_receive && - !sender->peer->can_receive(sender->peer)) { + } else if (sender->peer->info->can_receive && + !sender->peer->info->can_receive(sender->peer)) { return 0; } else { return 1; @@ -358,7 +352,7 @@ int qemu_can_send_packet(VLANClientState *sender) } /* no can_receive() handler, they can always receive */ - if (!vc->can_receive || vc->can_receive(vc)) { + if (!vc->info->can_receive || vc->info->can_receive(vc)) { return 1; } } @@ -382,10 +376,10 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender, return 0; } - if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->receive_raw) { - ret = vc->receive_raw(vc, data, size); + if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) { + ret = vc->info->receive_raw(vc, data, size); } else { - ret = vc->receive(vc, data, size); + ret = vc->info->receive(vc, data, size); } if (ret == 0) { @@ -422,10 +416,10 @@ static ssize_t qemu_vlan_deliver_packet(VLANClientState *sender, continue; } - if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->receive_raw) { - len = vc->receive_raw(vc, buf, size); + if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) { + len = vc->info->receive_raw(vc, buf, size); } else { - len = vc->receive(vc, buf, size); + len = vc->info->receive(vc, buf, size); } if (len == 0) { @@ -530,7 +524,7 @@ static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov, offset += len; } - return vc->receive(vc, buffer, offset); + return vc->info->receive(vc, buffer, offset); } static ssize_t calc_iov_length(const struct iovec *iov, int iovcnt) @@ -555,8 +549,8 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender, return calc_iov_length(iov, iovcnt); } - if (vc->receive_iov) { - return vc->receive_iov(vc, iov, iovcnt); + if (vc->info->receive_iov) { + return vc->info->receive_iov(vc, iov, iovcnt); } else { return vc_sendv_compat(vc, iov, iovcnt); } @@ -586,8 +580,8 @@ static ssize_t qemu_vlan_deliver_packet_iov(VLANClientState *sender, assert(!(flags & QEMU_NET_PACKET_FLAG_RAW)); - if (vc->receive_iov) { - len = vc->receive_iov(vc, iov, iovcnt); + if (vc->info->receive_iov) { + len = vc->info->receive_iov(vc, iov, iovcnt); } else { len = vc_sendv_compat(vc, iov, iovcnt); } @@ -1246,8 +1240,9 @@ done: monitor_printf(mon, "invalid link status '%s'; only 'up' or 'down' " "valid\n", up_or_down); - if (vc->link_status_changed) - vc->link_status_changed(vc); + if (vc->info->link_status_changed) { + vc->info->link_status_changed(vc); + } } void net_cleanup(void) diff --git a/net.h b/net.h index 9185bcf..497a737 100644 --- a/net.h +++ b/net.h @@ -54,15 +54,7 @@ typedef struct NetClientInfo { } NetClientInfo; struct VLANClientState { - net_client_type type; - NetReceive *receive; - NetReceive *receive_raw; - NetReceiveIOV *receive_iov; - /* Packets may still be sent if this returns zero. It's used to - rate-limit the slirp code. */ - NetCanReceive *can_receive; - NetCleanup *cleanup; - LinkStatusChanged *link_status_changed; + NetClientInfo *info; int link_down; QTAILQ_ENTRY(VLANClientState) next; struct VLANState *vlan; diff --git a/net/tap.c b/net/tap.c index d34feec..a327a9a 100644 --- a/net/tap.c +++ b/net/tap.c @@ -214,7 +214,7 @@ int tap_has_ufo(VLANClientState *nc) { TAPState *s = DO_UPCAST(TAPState, nc, nc); - assert(nc->type == NET_CLIENT_TYPE_TAP); + assert(nc->info->type == NET_CLIENT_TYPE_TAP); return s->has_ufo; } @@ -223,7 +223,7 @@ int tap_has_vnet_hdr(VLANClientState *nc) { TAPState *s = DO_UPCAST(TAPState, nc, nc); - assert(nc->type == NET_CLIENT_TYPE_TAP); + assert(nc->info->type == NET_CLIENT_TYPE_TAP); return s->has_vnet_hdr; } @@ -234,7 +234,7 @@ void tap_using_vnet_hdr(VLANClientState *nc, int using_vnet_hdr) using_vnet_hdr = using_vnet_hdr != 0; - assert(nc->type == NET_CLIENT_TYPE_TAP); + assert(nc->info->type == NET_CLIENT_TYPE_TAP); assert(s->has_vnet_hdr == using_vnet_hdr); s->using_vnet_hdr = using_vnet_hdr;