Yang Hongyang <yan...@cn.fujitsu.com> writes: > 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?
This series is in my review queue. I'm struggling with clearing my queue, and apologize for the delay.