|
From: | Jason Wang |
Subject: | Re: [Qemu-devel] [PATCH] net/net: Add ReadState for reuse codes |
Date: | Thu, 12 May 2016 16:07:16 +0800 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 |
On 2016年05月12日 14:33, Zhang Chen wrote:
+ ret = net_fill_rstate(&s->rs, buf, size); + + if (ret == -1) { + goto eoc; + } else if (ret == 1) { + if (qemu_send_packet_async(&s->nc, s->rs.buf, + s->rs.packet_len, + net_socket_send_completed) == 0) { + net_socket_read_poll(s, false);This looks not elegant, maybe we could use callback (which was initialized by the helper I mention above) to do this. Any thoughts on this?Do you mean: remove + if (qemu_send_packet_async(&s->nc, s->rs.buf, + s->rs.packet_len, + net_socket_send_completed) == 0) { + net_socket_read_poll(s, false); add s->rs->done void socket_fill_rsstate_done_cb(SocketReadState *srs, void *opaque) { NetSocketState *s = opaque; if (qemu_send_packet_async(&s->nc, srs->buf, srs->packet_len, net_socket_send_completed) == 0) { net_socket_read_poll(s, false); } }Yes, but there's no need for opaque, we can infer the container by container_of().But in filter-mirror.c we need do this: void redirector_fill_rsstate_done_cb(SocketReadState *srs, void *opaque) { NetFilterState *nf = opaque; redirector_to_filter(nf, srs->buf, srs->packet_len); } so,I think we have to use void *opaque.
You mean you need to get nf? Since SocketReadState were embedded in MirrorState, so you could get the address of MirrorState, then it's not hard to get nf address?
[Prev in Thread] | Current Thread | [Next in Thread] |