From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50061) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaIEn-0002Lq-CD for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:27:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aaIEm-0003XF-By for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:27:25 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44181) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aaIEm-0003X9-7W for qemu-devel@nongnu.org; Mon, 29 Feb 2016 02:27:24 -0500 References: <1456710366-10980-1-git-send-email-zhang.zhanghailiang@huawei.com> <1456710366-10980-3-git-send-email-zhang.zhanghailiang@huawei.com> From: Jason Wang Message-ID: <56D3F2D2.9030600@redhat.com> Date: Mon, 29 Feb 2016 15:27:14 +0800 MIME-Version: 1.0 In-Reply-To: <1456710366-10980-3-git-send-email-zhang.zhanghailiang@huawei.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: zhanghailiang , qemu-devel@nongnu.org Cc: hongyang.yang@easystack.cn On 02/29/2016 09:46 AM, zhanghailiang wrote: > While the status of filter-buffer changing from 'on' to 'off', > it need to release all the buffered packets, and delete the related > timer, while switch from 'off' to 'on', it need to resume the release > packets timer. > > Signed-off-by: zhanghailiang > Cc: Jason Wang > Cc: Yang Hongyang > --- > v2: > - New patch > --- > net/filter-buffer.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/net/filter-buffer.c b/net/filter-buffer.c > index 12ad2e3..ed3f19e 100644 > --- a/net/filter-buffer.c > +++ b/net/filter-buffer.c > @@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp) > } > } > > +static void filter_buffer_status_changed(NetFilterState *nf, Error **errp) > +{ > + FilterBufferState *s = FILTER_BUFFER(nf); > + > + if (!strcmp(nf->status, "off")) { > + if (s->interval) { > + timer_del(&s->release_timer); > + } > + filter_buffer_flush(nf); > + } else { > + if (s->interval) { > + timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL, > + filter_buffer_release_timer, nf); > + timer_mod(&s->release_timer, > + qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval); > + } The code looks duplicated with filter_buffer_setup(). > + } > +} > static void filter_buffer_class_init(ObjectClass *oc, void *data) > { > NetFilterClass *nfc = NETFILTER_CLASS(oc); > @@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data) > nfc->setup = filter_buffer_setup; > nfc->cleanup = filter_buffer_cleanup; > nfc->receive_iov = filter_buffer_receive_iov; > + nfc->status_changed = filter_buffer_status_changed; > } > > static void filter_buffer_get_interval(Object *obj, Visitor *v,