From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53796) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYshM-0006xq-3o for qemu-devel@nongnu.org; Mon, 07 Sep 2015 05:26:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZYshH-00040y-0v for qemu-devel@nongnu.org; Mon, 07 Sep 2015 05:26:48 -0400 Received: from [59.151.112.132] (port=17487 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYshG-0003yL-NA for qemu-devel@nongnu.org; Mon, 07 Sep 2015 05:26:42 -0400 Message-ID: <55ED5849.6050404@cn.fujitsu.com> Date: Mon, 7 Sep 2015 17:26:33 +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> <55ED3EB0.1030902@cn.fujitsu.com> <20150907091117.GA8893@stefanha-thinkpad.redhat.com> In-Reply-To: <20150907091117.GA8893@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 Cc: thuth@redhat.com, zhang.zhanghailiang@huawei.com, lizhijian@cn.fujitsu.com, jasowang@redhat.com, qemu-devel@nongnu.org, mrhines@linux.vnet.ibm.com, Markus Armbruster , Andreas Faerber On 09/07/2015 05:11 PM, Stefan Hajnoczi wrote: > On Mon, Sep 07, 2015 at 03:37:20PM +0800, Yang Hongyang wrote: >> 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? > > If you would like to see examples of QOM usage, take a look at > iothread.c and/or backends/hostmem.c. > > The key things are: > > 1. They use include/qom/object.h to register a type based on > TYPE_OBJECT and their properties are registered using > object_property_add_*(). > > 2. They implement the TYPE_USER_CREATABLE interface so the -object > command-line option can be used to instantiate them. See > object_interfaces.h. > > As a result, a lot of code becomes unnecessary and iothread.c, in > particular, is quite short. Thanks a lot, this is what I need, will look into this and rebase this series on top of QOM. > > Stefan > . > -- Thanks, Yang.