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.

Reply via email to