From patchwork Sat Oct 22 05:38:57 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Wang X-Patchwork-Id: 121152 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C734D1007D3 for ; Sat, 22 Oct 2011 16:39:48 +1100 (EST) Received: from localhost ([::1]:46736 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RHUIz-00043L-Hx for incoming@patchwork.ozlabs.org; Sat, 22 Oct 2011 01:39:37 -0400 Received: from eggs.gnu.org ([140.186.70.92]:47589) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RHUIW-00036y-14 for qemu-devel@nongnu.org; Sat, 22 Oct 2011 01:39:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RHUIR-0000SR-VD for qemu-devel@nongnu.org; Sat, 22 Oct 2011 01:39:04 -0400 Received: from mx1.redhat.com ([209.132.183.28]:31161) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RHUIR-0000Rp-Ht for qemu-devel@nongnu.org; Sat, 22 Oct 2011 01:39:03 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p9M5d2HT012867 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 22 Oct 2011 01:39:02 -0400 Received: from dhcp-8-146.nay.redhat.com (dhcp-8-146.nay.redhat.com [10.66.8.146]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p9M5cwFk022375; Sat, 22 Oct 2011 01:38:58 -0400 To: aliguori@us.ibm.com, quintela@redhat.com, jan.kiszka@siemens.com, mst@redhat.com, qemu-devel@nongnu.org, blauwirbel@gmail.com From: Jason Wang Date: Sat, 22 Oct 2011 13:38:57 +0800 Message-ID: <20111022053857.21526.82999.stgit@dhcp-8-146.nay.redhat.com> In-Reply-To: <20111022053540.21526.61249.stgit@dhcp-8-146.nay.redhat.com> References: <20111022053540.21526.61249.stgit@dhcp-8-146.nay.redhat.com> User-Agent: StGit/0.15 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 209.132.183.28 Cc: pbonzini@redhat.com, rusty@rustcorp.com.au, kvm@vger.kernel.org, netdev@vger.kernel.org Subject: [Qemu-devel] [RFC v2 PATCH 3/4] net: model specific announcing support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This patch introduce a function pointer in NetClientInfo which is called during self announcement to do the model specific announcement such as sending gratuitous packet. Previous method is kept when model specific announcing fails or without it. The first user would be virtio-net. Signed-off-by: Jason Wang --- net.h | 2 ++ savevm.c | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/net.h b/net.h index 4943d4b..1845f01 100644 --- a/net.h +++ b/net.h @@ -46,6 +46,7 @@ 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 int (NetAnnounce)(VLANClientState *); typedef struct NetClientInfo { net_client_type type; @@ -57,6 +58,7 @@ typedef struct NetClientInfo { NetCleanup *cleanup; LinkStatusChanged *link_status_changed; NetPoll *poll; + NetAnnounce *announce; } NetClientInfo; struct VLANClientState { diff --git a/savevm.c b/savevm.c index 8293ee6..de6a01a 100644 --- a/savevm.c +++ b/savevm.c @@ -89,10 +89,12 @@ static void qemu_announce_self_iter(NICState *nic, void *opaque) { uint8_t buf[60]; int len; + NetAnnounce *func = nic->nc.info->announce; - len = announce_self_create(buf, nic->conf->macaddr.a); - - qemu_send_packet_raw(&nic->nc, buf, len); + if (func == NULL || func(&nic->nc) != 0) { + len = announce_self_create(buf, nic->conf->macaddr.a); + qemu_send_packet_raw(&nic->nc, buf, len); + } }