Message ID | 1494553288-30764-3-git-send-email-zhangchen.fnst@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On 2017/5/12 9:41, Zhang Chen wrote: > We add the vnet_hdr option for filter-mirror, default is disable. > If you use virtio-net-pci net driver, please enable it. > You can use it for example: > -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0,vnet_hdr=on Is there any way to detect whether or not the vNIC using vnet_hdr ? I don't think it is a good idea to let users to confirm it, especially for users who may not be so familiar with the vNIC realizing in qemu. Thanks, Hailiang > Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> > --- > net/filter-mirror.c | 34 ++++++++++++++++++++++++++++++++++ > qemu-options.hx | 5 +++-- > 2 files changed, 37 insertions(+), 2 deletions(-) > > diff --git a/net/filter-mirror.c b/net/filter-mirror.c > index 72fa7c2..3766414 100644 > --- a/net/filter-mirror.c > +++ b/net/filter-mirror.c > @@ -38,6 +38,7 @@ typedef struct MirrorState { > NetFilterState parent_obj; > char *indev; > char *outdev; > + bool vnet_hdr; > CharBackend chr_in; > CharBackend chr_out; > SocketReadState rs; > @@ -308,6 +309,13 @@ static char *filter_mirror_get_outdev(Object *obj, Error **errp) > return g_strdup(s->outdev); > } > > +static char *filter_mirror_get_vnet_hdr(Object *obj, Error **errp) > +{ > + MirrorState *s = FILTER_MIRROR(obj); > + > + return s->vnet_hdr ? g_strdup("on") : g_strdup("off"); > +} > + > static void > filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) > { > @@ -322,6 +330,21 @@ filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) > } > } > > +static void filter_mirror_set_vnet_hdr(Object *obj, > + const char *value, > + Error **errp) > +{ > + MirrorState *s = FILTER_MIRROR(obj); > + > + if (strcmp(value, "on") && strcmp(value, "off")) { > + error_setg(errp, "Invalid value for filter-mirror vnet_hdr, " > + "should be 'on' or 'off'"); > + return; > + } > + > + s->vnet_hdr = !strcmp(value, "on"); > +} > + > static char *filter_redirector_get_outdev(Object *obj, Error **errp) > { > MirrorState *s = FILTER_REDIRECTOR(obj); > @@ -340,8 +363,19 @@ filter_redirector_set_outdev(Object *obj, const char *value, Error **errp) > > static void filter_mirror_init(Object *obj) > { > + MirrorState *s = FILTER_MIRROR(obj); > + > object_property_add_str(obj, "outdev", filter_mirror_get_outdev, > filter_mirror_set_outdev, NULL); > + > + /* > + * The vnet_hdr is disabled by default, if you want to enable > + * this option, you must enable all the option on related modules > + * (like other filter or colo-compare). > + */ > + s->vnet_hdr = false; > + object_property_add_str(obj, "vnet_hdr", filter_mirror_get_vnet_hdr, > + filter_mirror_set_vnet_hdr, NULL); > } > > static void filter_redirector_init(Object *obj) > diff --git a/qemu-options.hx b/qemu-options.hx > index 70c0ded..1e08481 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -4024,10 +4024,11 @@ queue @var{all|rx|tx} is an option that can be applied to any netfilter. > @option{tx}: the filter is attached to the transmit queue of the netdev, > where it will receive packets sent by the netdev. > > -@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid}[,queue=@var{all|rx|tx}] > +@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid},vnet_hdr=@var{on|off}[,queue=@var{all|rx|tx}] > > filter-mirror on netdev @var{netdevid},mirror net packet to chardev > -@var{chardevid} > +@var{chardevid}, if vnet_hdr = on, filter-mirror will mirror packet > +with vnet_hdr_len. > > @item -object filter-redirector,id=@var{id},netdev=@var{netdevid},indev=@var{chardevid}, > outdev=@var{chardevid}[,queue=@var{all|rx|tx}]
On 05/13/2017 09:49 AM, Hailiang Zhang wrote: > Hi, > > On 2017/5/12 9:41, Zhang Chen wrote: >> We add the vnet_hdr option for filter-mirror, default is disable. >> If you use virtio-net-pci net driver, please enable it. >> You can use it for example: >> -object >> filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0,vnet_hdr=on > > Is there any way to detect whether or not the vNIC using vnet_hdr ? Yes, we can. but we can't ensure the backward compatibility. Detail: https://lists.nongnu.org/archive/html/qemu-devel/2017-05/msg01959.html > I don't think it is a good idea to let users to confirm it, especially > for users who may not > be so familiar with the vNIC realizing in qemu. > If you don't use virtio-net-pci that you need't add this option, default is false. Thanks Zhang Chen > > Thanks, > Hailiang > >> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> >> --- >> net/filter-mirror.c | 34 ++++++++++++++++++++++++++++++++++ >> qemu-options.hx | 5 +++-- >> 2 files changed, 37 insertions(+), 2 deletions(-) >> >> diff --git a/net/filter-mirror.c b/net/filter-mirror.c >> index 72fa7c2..3766414 100644 >> --- a/net/filter-mirror.c >> +++ b/net/filter-mirror.c >> @@ -38,6 +38,7 @@ typedef struct MirrorState { >> NetFilterState parent_obj; >> char *indev; >> char *outdev; >> + bool vnet_hdr; >> CharBackend chr_in; >> CharBackend chr_out; >> SocketReadState rs; >> @@ -308,6 +309,13 @@ static char *filter_mirror_get_outdev(Object >> *obj, Error **errp) >> return g_strdup(s->outdev); >> } >> +static char *filter_mirror_get_vnet_hdr(Object *obj, Error **errp) >> +{ >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> + return s->vnet_hdr ? g_strdup("on") : g_strdup("off"); >> +} >> + >> static void >> filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) >> { >> @@ -322,6 +330,21 @@ filter_mirror_set_outdev(Object *obj, const char >> *value, Error **errp) >> } >> } >> +static void filter_mirror_set_vnet_hdr(Object *obj, >> + const char *value, >> + Error **errp) >> +{ >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> + if (strcmp(value, "on") && strcmp(value, "off")) { >> + error_setg(errp, "Invalid value for filter-mirror vnet_hdr, " >> + "should be 'on' or 'off'"); >> + return; >> + } >> + >> + s->vnet_hdr = !strcmp(value, "on"); >> +} >> + >> static char *filter_redirector_get_outdev(Object *obj, Error **errp) >> { >> MirrorState *s = FILTER_REDIRECTOR(obj); >> @@ -340,8 +363,19 @@ filter_redirector_set_outdev(Object *obj, const >> char *value, Error **errp) >> static void filter_mirror_init(Object *obj) >> { >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> object_property_add_str(obj, "outdev", filter_mirror_get_outdev, >> filter_mirror_set_outdev, NULL); >> + >> + /* >> + * The vnet_hdr is disabled by default, if you want to enable >> + * this option, you must enable all the option on related modules >> + * (like other filter or colo-compare). >> + */ >> + s->vnet_hdr = false; >> + object_property_add_str(obj, "vnet_hdr", >> filter_mirror_get_vnet_hdr, >> + filter_mirror_set_vnet_hdr, NULL); >> } >> static void filter_redirector_init(Object *obj) >> diff --git a/qemu-options.hx b/qemu-options.hx >> index 70c0ded..1e08481 100644 >> --- a/qemu-options.hx >> +++ b/qemu-options.hx >> @@ -4024,10 +4024,11 @@ queue @var{all|rx|tx} is an option that can >> be applied to any netfilter. >> @option{tx}: the filter is attached to the transmit queue of the >> netdev, >> where it will receive packets sent by the netdev. >> -@item -object >> filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid}[,queue=@var{all|rx|tx}] >> +@item -object >> filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid},vnet_hdr=@var{on|off}[,queue=@var{all|rx|tx}] >> filter-mirror on netdev @var{netdevid},mirror net packet to chardev >> -@var{chardevid} >> +@var{chardevid}, if vnet_hdr = on, filter-mirror will mirror packet >> +with vnet_hdr_len. >> @item -object >> filter-redirector,id=@var{id},netdev=@var{netdevid},indev=@var{chardevid}, >> outdev=@var{chardevid}[,queue=@var{all|rx|tx}] > > > > > . >
On 2017年05月12日 09:41, Zhang Chen wrote: > We add the vnet_hdr option for filter-mirror, default is disable. > If you use virtio-net-pci net driver, please enable it. > You can use it for example: > -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0,vnet_hdr=on > > Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> > --- > net/filter-mirror.c | 34 ++++++++++++++++++++++++++++++++++ > qemu-options.hx | 5 +++-- > 2 files changed, 37 insertions(+), 2 deletions(-) > > diff --git a/net/filter-mirror.c b/net/filter-mirror.c > index 72fa7c2..3766414 100644 > --- a/net/filter-mirror.c > +++ b/net/filter-mirror.c > @@ -38,6 +38,7 @@ typedef struct MirrorState { > NetFilterState parent_obj; > char *indev; > char *outdev; > + bool vnet_hdr; > CharBackend chr_in; > CharBackend chr_out; > SocketReadState rs; > @@ -308,6 +309,13 @@ static char *filter_mirror_get_outdev(Object *obj, Error **errp) > return g_strdup(s->outdev); > } > > +static char *filter_mirror_get_vnet_hdr(Object *obj, Error **errp) > +{ > + MirrorState *s = FILTER_MIRROR(obj); > + > + return s->vnet_hdr ? g_strdup("on") : g_strdup("off"); > +} > + > static void > filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) > { > @@ -322,6 +330,21 @@ filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) > } > } > > +static void filter_mirror_set_vnet_hdr(Object *obj, > + const char *value, > + Error **errp) > +{ > + MirrorState *s = FILTER_MIRROR(obj); > + > + if (strcmp(value, "on") && strcmp(value, "off")) { > + error_setg(errp, "Invalid value for filter-mirror vnet_hdr, " > + "should be 'on' or 'off'"); > + return; > + } > + > + s->vnet_hdr = !strcmp(value, "on"); > +} > + > static char *filter_redirector_get_outdev(Object *obj, Error **errp) > { > MirrorState *s = FILTER_REDIRECTOR(obj); > @@ -340,8 +363,19 @@ filter_redirector_set_outdev(Object *obj, const char *value, Error **errp) > > static void filter_mirror_init(Object *obj) > { > + MirrorState *s = FILTER_MIRROR(obj); > + > object_property_add_str(obj, "outdev", filter_mirror_get_outdev, > filter_mirror_set_outdev, NULL); > + > + /* > + * The vnet_hdr is disabled by default, if you want to enable > + * this option, you must enable all the option on related modules > + * (like other filter or colo-compare). > + */ > + s->vnet_hdr = false; > + object_property_add_str(obj, "vnet_hdr", filter_mirror_get_vnet_hdr, > + filter_mirror_set_vnet_hdr, NULL); > } We'd better squash this into patch 3 and even after the changes for net_fill_rstate(). > > static void filter_redirector_init(Object *obj) > diff --git a/qemu-options.hx b/qemu-options.hx > index 70c0ded..1e08481 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -4024,10 +4024,11 @@ queue @var{all|rx|tx} is an option that can be applied to any netfilter. > @option{tx}: the filter is attached to the transmit queue of the netdev, > where it will receive packets sent by the netdev. > > -@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid}[,queue=@var{all|rx|tx}] > +@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid},vnet_hdr=@var{on|off}[,queue=@var{all|rx|tx}] > > filter-mirror on netdev @var{netdevid},mirror net packet to chardev > -@var{chardevid} > +@var{chardevid}, if vnet_hdr = on, filter-mirror will mirror packet > +with vnet_hdr_len. As pointed by Eric, we'd better keep the long line here. Thanks > > @item -object filter-redirector,id=@var{id},netdev=@var{netdevid},indev=@var{chardevid}, > outdev=@var{chardevid}[,queue=@var{all|rx|tx}]
On 05/15/2017 11:26 AM, Jason Wang wrote: > > > On 2017年05月12日 09:41, Zhang Chen wrote: >> We add the vnet_hdr option for filter-mirror, default is disable. >> If you use virtio-net-pci net driver, please enable it. >> You can use it for example: >> -object >> filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0,vnet_hdr=on >> >> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> >> --- >> net/filter-mirror.c | 34 ++++++++++++++++++++++++++++++++++ >> qemu-options.hx | 5 +++-- >> 2 files changed, 37 insertions(+), 2 deletions(-) >> >> diff --git a/net/filter-mirror.c b/net/filter-mirror.c >> index 72fa7c2..3766414 100644 >> --- a/net/filter-mirror.c >> +++ b/net/filter-mirror.c >> @@ -38,6 +38,7 @@ typedef struct MirrorState { >> NetFilterState parent_obj; >> char *indev; >> char *outdev; >> + bool vnet_hdr; >> CharBackend chr_in; >> CharBackend chr_out; >> SocketReadState rs; >> @@ -308,6 +309,13 @@ static char *filter_mirror_get_outdev(Object >> *obj, Error **errp) >> return g_strdup(s->outdev); >> } >> +static char *filter_mirror_get_vnet_hdr(Object *obj, Error **errp) >> +{ >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> + return s->vnet_hdr ? g_strdup("on") : g_strdup("off"); >> +} >> + >> static void >> filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) >> { >> @@ -322,6 +330,21 @@ filter_mirror_set_outdev(Object *obj, const char >> *value, Error **errp) >> } >> } >> +static void filter_mirror_set_vnet_hdr(Object *obj, >> + const char *value, >> + Error **errp) >> +{ >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> + if (strcmp(value, "on") && strcmp(value, "off")) { >> + error_setg(errp, "Invalid value for filter-mirror vnet_hdr, " >> + "should be 'on' or 'off'"); >> + return; >> + } >> + >> + s->vnet_hdr = !strcmp(value, "on"); >> +} >> + >> static char *filter_redirector_get_outdev(Object *obj, Error **errp) >> { >> MirrorState *s = FILTER_REDIRECTOR(obj); >> @@ -340,8 +363,19 @@ filter_redirector_set_outdev(Object *obj, const >> char *value, Error **errp) >> static void filter_mirror_init(Object *obj) >> { >> + MirrorState *s = FILTER_MIRROR(obj); >> + >> object_property_add_str(obj, "outdev", filter_mirror_get_outdev, >> filter_mirror_set_outdev, NULL); >> + >> + /* >> + * The vnet_hdr is disabled by default, if you want to enable >> + * this option, you must enable all the option on related modules >> + * (like other filter or colo-compare). >> + */ >> + s->vnet_hdr = false; >> + object_property_add_str(obj, "vnet_hdr", >> filter_mirror_get_vnet_hdr, >> + filter_mirror_set_vnet_hdr, NULL); >> } > > We'd better squash this into patch 3 and even after the changes for > net_fill_rstate(). OK, I will squash it in next version. > >> static void filter_redirector_init(Object *obj) >> diff --git a/qemu-options.hx b/qemu-options.hx >> index 70c0ded..1e08481 100644 >> --- a/qemu-options.hx >> +++ b/qemu-options.hx >> @@ -4024,10 +4024,11 @@ queue @var{all|rx|tx} is an option that can >> be applied to any netfilter. >> @option{tx}: the filter is attached to the transmit queue of the >> netdev, >> where it will receive packets sent by the netdev. >> -@item -object >> filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid}[,queue=@var{all|rx|tx}] >> +@item -object >> filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid},vnet_hdr=@var{on|off}[,queue=@var{all|rx|tx}] >> filter-mirror on netdev @var{netdevid},mirror net packet to chardev >> -@var{chardevid} >> +@var{chardevid}, if vnet_hdr = on, filter-mirror will mirror packet >> +with vnet_hdr_len. > > As pointed by Eric, we'd better keep the long line here. OK. Thanks Zhang Chen > > Thanks > >> @item -object >> filter-redirector,id=@var{id},netdev=@var{netdevid},indev=@var{chardevid}, >> outdev=@var{chardevid}[,queue=@var{all|rx|tx}] > > > > . >
diff --git a/net/filter-mirror.c b/net/filter-mirror.c index 72fa7c2..3766414 100644 --- a/net/filter-mirror.c +++ b/net/filter-mirror.c @@ -38,6 +38,7 @@ typedef struct MirrorState { NetFilterState parent_obj; char *indev; char *outdev; + bool vnet_hdr; CharBackend chr_in; CharBackend chr_out; SocketReadState rs; @@ -308,6 +309,13 @@ static char *filter_mirror_get_outdev(Object *obj, Error **errp) return g_strdup(s->outdev); } +static char *filter_mirror_get_vnet_hdr(Object *obj, Error **errp) +{ + MirrorState *s = FILTER_MIRROR(obj); + + return s->vnet_hdr ? g_strdup("on") : g_strdup("off"); +} + static void filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) { @@ -322,6 +330,21 @@ filter_mirror_set_outdev(Object *obj, const char *value, Error **errp) } } +static void filter_mirror_set_vnet_hdr(Object *obj, + const char *value, + Error **errp) +{ + MirrorState *s = FILTER_MIRROR(obj); + + if (strcmp(value, "on") && strcmp(value, "off")) { + error_setg(errp, "Invalid value for filter-mirror vnet_hdr, " + "should be 'on' or 'off'"); + return; + } + + s->vnet_hdr = !strcmp(value, "on"); +} + static char *filter_redirector_get_outdev(Object *obj, Error **errp) { MirrorState *s = FILTER_REDIRECTOR(obj); @@ -340,8 +363,19 @@ filter_redirector_set_outdev(Object *obj, const char *value, Error **errp) static void filter_mirror_init(Object *obj) { + MirrorState *s = FILTER_MIRROR(obj); + object_property_add_str(obj, "outdev", filter_mirror_get_outdev, filter_mirror_set_outdev, NULL); + + /* + * The vnet_hdr is disabled by default, if you want to enable + * this option, you must enable all the option on related modules + * (like other filter or colo-compare). + */ + s->vnet_hdr = false; + object_property_add_str(obj, "vnet_hdr", filter_mirror_get_vnet_hdr, + filter_mirror_set_vnet_hdr, NULL); } static void filter_redirector_init(Object *obj) diff --git a/qemu-options.hx b/qemu-options.hx index 70c0ded..1e08481 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4024,10 +4024,11 @@ queue @var{all|rx|tx} is an option that can be applied to any netfilter. @option{tx}: the filter is attached to the transmit queue of the netdev, where it will receive packets sent by the netdev. -@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid}[,queue=@var{all|rx|tx}] +@item -object filter-mirror,id=@var{id},netdev=@var{netdevid},outdev=@var{chardevid},vnet_hdr=@var{on|off}[,queue=@var{all|rx|tx}] filter-mirror on netdev @var{netdevid},mirror net packet to chardev -@var{chardevid} +@var{chardevid}, if vnet_hdr = on, filter-mirror will mirror packet +with vnet_hdr_len. @item -object filter-redirector,id=@var{id},netdev=@var{netdevid},indev=@var{chardevid}, outdev=@var{chardevid}[,queue=@var{all|rx|tx}]
We add the vnet_hdr option for filter-mirror, default is disable. If you use virtio-net-pci net driver, please enable it. You can use it for example: -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0,vnet_hdr=on Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> --- net/filter-mirror.c | 34 ++++++++++++++++++++++++++++++++++ qemu-options.hx | 5 +++-- 2 files changed, 37 insertions(+), 2 deletions(-)