From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53849) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYqzi-0005sG-BX for qemu-devel@nongnu.org; Mon, 07 Sep 2015 03:37:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZYqzf-0005dz-69 for qemu-devel@nongnu.org; Mon, 07 Sep 2015 03:37:38 -0400 Received: from [59.151.112.132] (port=5288 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYqze-0005dU-Qv for qemu-devel@nongnu.org; Mon, 07 Sep 2015 03:37:35 -0400 Message-ID: <55ED3EB0.1030902@cn.fujitsu.com> Date: Mon, 7 Sep 2015 15:37:20 +0800 From: Yang Hongyang MIME-Version: 1.0 References: <1441098383-22585-1-git-send-email-yanghy@cn.fujitsu.com> <1441098383-22585-6-git-send-email-yanghy@cn.fujitsu.com> <20150901144308.GE2407@stefanha-thinkpad.redhat.com> <55E6559E.5060305@cn.fujitsu.com> <20150902130245.GI17873@stefanha-thinkpad.redhat.com> <55E7214A.20803@cn.fujitsu.com> <20150904103255.GB8683@stefanha-thinkpad.redhat.com> In-Reply-To: <20150904103255.GB8683@stefanha-thinkpad.redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v9 05/10] move out net queue structs define List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi , Markus Armbruster , Andreas Faerber Cc: thuth@redhat.com, zhang.zhanghailiang@huawei.com, lizhijian@cn.fujitsu.com, jasowang@redhat.com, qemu-devel@nongnu.org, mrhines@linux.vnet.ibm.com Hi Stefan, On 09/04/2015 06:32 PM, Stefan Hajnoczi wrote: [...] > > net/queue.c has logic to send/queue/flush packets but a > qemu_deliver_packet() call is hardcoded. > > Maybe you can extend qemu_new_net_queue() like this: > > /* Returns: > * >0 - success > * 0 - queue packet for future redelivery > * <0 - failure (discard packet) > */ > typedef ssize_t NetQueueDeliverFunc(NetClientState *sender, > unsigned flags, > const struct iovec *iov, > int iovcnt, > void *opaque); > > NetQueue *qemu_new_net_queue(NetQueueDeliverFunc deliver, > void *opaque); > > Now net/net.c:qemu_net_client_setup() needs to call: > > nc->incoming_queue = qemu_new_net_queue(qemu_deliver_packet_iov, nc); > > And the filter code can use qemu_net_queue_send_iov() and > qemu_net_queue_flush(). The filter just needs to provide its own > NetQueueDeliveryFunc. > > I haven't checked the details (e.g. non-iov delivery, etc) but the idea > is to use the net/queue.c API instead of duplicating similar logic in > the filter code. Thanks very much for the suggestion, I've already implemented it and tested, the code looks cleaner now. The last issue is the QOM thing, do Markus and Andreas have more input about that? > . > -- Thanks, Yang.