qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>,
	qemu devel <qemu-devel@nongnu.org>
Cc: zhanghailiang <zhang.zhanghailiang@huawei.com>,
	weifuqiang <weifuqiang@huawei.com>,
	"eddie . dong" <eddie.dong@intel.com>,
	bian naimeng <biannm@cn.fujitsu.com>,
	Li Zhijian <lizhijian@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH V4 05/12] net/net.c: Add vnet_hdr support in SocketReadState
Date: Mon, 15 May 2017 12:02:18 +0800	[thread overview]
Message-ID: <adbf3cf7-29c5-13c3-c4ff-d05598c7bb17@redhat.com> (raw)
In-Reply-To: <1494553288-30764-6-git-send-email-zhangchen.fnst@cn.fujitsu.com>



On 2017年05月12日 09:41, Zhang Chen wrote:
> Address Jason Wang's comments add vnet header length to SocketReadState.

Better to use "Suggested-by" instead of this :).

> We add a flag to dicide whether net_fill_rstate() to read
> struct  {int size; int vnet_hdr_len; const uint8_t buf[];} or not.

Few words to explain the format is better than e.g a struct.

>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> ---
>   include/net/net.h   |  9 +++++++--
>   net/colo-compare.c  |  4 ++--
>   net/filter-mirror.c |  2 +-
>   net/net.c           | 36 ++++++++++++++++++++++++++++++++----
>   net/socket.c        |  2 +-
>   5 files changed, 43 insertions(+), 10 deletions(-)
>
> diff --git a/include/net/net.h b/include/net/net.h
> index 70edfc0..0763636 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -113,14 +113,19 @@ typedef struct NICState {
>   } NICState;
>   
>   struct SocketReadState {
> -    int state; /* 0 = getting length, 1 = getting data */
> +    /* 0 = getting length, 1 = getting vnet header length, 2 = getting data */
> +    int state;
>       uint32_t index;
>       uint32_t packet_len;
> +    uint32_t vnet_hdr_len;
>       uint8_t buf[NET_BUFSIZE];
>       SocketReadStateFinalize *finalize;
>   };
>   
> -int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size);
> +int net_fill_rstate(SocketReadState *rs,
> +                    const uint8_t *buf,
> +                    int size,
> +                    bool vnet_hdr);

Why not just move vnet_hdr to SocketReadState?

Thanks

>   char *qemu_mac_strdup_printf(const uint8_t *macaddr);
>   NetClientState *qemu_find_netdev(const char *id);
>   int qemu_find_net_clients_except(const char *id, NetClientState **ncs,
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 4ab80b1..332f57e 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -530,7 +530,7 @@ static void compare_pri_chr_in(void *opaque, const uint8_t *buf, int size)
>       CompareState *s = COLO_COMPARE(opaque);
>       int ret;
>   
> -    ret = net_fill_rstate(&s->pri_rs, buf, size);
> +    ret = net_fill_rstate(&s->pri_rs, buf, size, false);
>       if (ret == -1) {
>           qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL,
>                                    NULL, NULL, true);
> @@ -547,7 +547,7 @@ static void compare_sec_chr_in(void *opaque, const uint8_t *buf, int size)
>       CompareState *s = COLO_COMPARE(opaque);
>       int ret;
>   
> -    ret = net_fill_rstate(&s->sec_rs, buf, size);
> +    ret = net_fill_rstate(&s->sec_rs, buf, size, false);
>       if (ret == -1) {
>           qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL,
>                                    NULL, NULL, true);
> diff --git a/net/filter-mirror.c b/net/filter-mirror.c
> index a65853c..4649416 100644
> --- a/net/filter-mirror.c
> +++ b/net/filter-mirror.c
> @@ -134,7 +134,7 @@ static void redirector_chr_read(void *opaque, const uint8_t *buf, int size)
>       MirrorState *s = FILTER_REDIRECTOR(nf);
>       int ret;
>   
> -    ret = net_fill_rstate(&s->rs, buf, size);
> +    ret = net_fill_rstate(&s->rs, buf, size, s->vnet_hdr);
>   
>       if (ret == -1) {
>           qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL,
> diff --git a/net/net.c b/net/net.c
> index a00a0c9..a9c97cf 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -1618,13 +1618,20 @@ void net_socket_rs_init(SocketReadState *rs,
>    * 0: success
>    * -1: error occurs
>    */
> -int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size)
> +int net_fill_rstate(SocketReadState *rs,
> +                    const uint8_t *buf,
> +                    int size,
> +                    bool vnet_hdr)
>   {
>       unsigned int l;
>   
>       while (size > 0) {
> -        /* reassemble a packet from the network */
> -        switch (rs->state) { /* 0 = getting length, 1 = getting data */
> +        /* Reassemble a packet from the network.
> +         * 0 = getting length.
> +         * 1 = getting vnet header length.
> +         * 2 = getting data.
> +         */
> +        switch (rs->state) {
>           case 0:
>               l = 4 - rs->index;
>               if (l > size) {
> @@ -1638,10 +1645,31 @@ int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size)
>                   /* got length */
>                   rs->packet_len = ntohl(*(uint32_t *)rs->buf);
>                   rs->index = 0;
> -                rs->state = 1;
> +                if (vnet_hdr) {
> +                    rs->state = 1;
> +                } else {
> +                    rs->state = 2;
> +                    rs->vnet_hdr_len = 0;
> +                }
>               }
>               break;
>           case 1:
> +            l = 4 - rs->index;
> +            if (l > size) {
> +                l = size;
> +            }
> +            memcpy(rs->buf + rs->index, buf, l);
> +            buf += l;
> +            size -= l;
> +            rs->index += l;
> +            if (rs->index == 4) {
> +                /* got vnet header length */
> +                rs->vnet_hdr_len = ntohl(*(uint32_t *)rs->buf);
> +                rs->index = 0;
> +                rs->state = 2;
> +            }
> +            break;
> +        case 2:
>               l = rs->packet_len - rs->index;
>               if (l > size) {
>                   l = size;
> diff --git a/net/socket.c b/net/socket.c
> index b8c931e..4e58eff 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -182,7 +182,7 @@ static void net_socket_send(void *opaque)
>       }
>       buf = buf1;
>   
> -    ret = net_fill_rstate(&s->rs, buf, size);
> +    ret = net_fill_rstate(&s->rs, buf, size, false);
>   
>       if (ret == -1) {
>           goto eoc;

  reply	other threads:[~2017-05-15  4:02 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-12  1:41 [Qemu-devel] [PATCH V4 00/12] Add COLO-proxy virtio-net support Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 01/12] net: Add vnet_hdr_len related arguments in NetClientState Zhang Chen
2017-05-13 21:24   ` Philippe Mathieu-Daudé
2017-05-15  3:24     ` Jason Wang
2017-05-15  6:56       ` Zhang Chen
2017-05-15  8:06         ` Jason Wang
2017-05-15  8:14           ` Zhang Chen
2017-05-16  6:49             ` Jason Wang
2017-05-23 12:06               ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 02/12] net/filter-mirror.c: Add new option to enable vnet support for filter-mirror Zhang Chen
2017-05-13  1:49   ` Hailiang Zhang
2017-05-14 14:31     ` Zhang Chen
2017-05-15  3:26   ` Jason Wang
2017-05-15  6:57     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 03/12] net/filter-mirror.c: Make filter_mirror_send support vnet support Zhang Chen
2017-05-15  3:28   ` Jason Wang
2017-05-15  7:34     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 04/12] net/filter-mirror.c: Add new option to enable vnet support for filter-redirector Zhang Chen
2017-05-15  3:31   ` Jason Wang
2017-05-15  7:47     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 05/12] net/net.c: Add vnet_hdr support in SocketReadState Zhang Chen
2017-05-15  4:02   ` Jason Wang [this message]
2017-05-15  7:49     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 06/12] net/colo-compare.c: Add new option to enable vnet support for colo-compare Zhang Chen
2017-05-15  4:03   ` Jason Wang
2017-05-15  7:55     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 07/12] net/colo.c: Make vnet_hdr_len as packet property Zhang Chen
2017-05-15  4:05   ` Jason Wang
2017-05-15  8:03     ` Zhang Chen
2017-05-15  8:18       ` Jason Wang
2017-05-23 11:59         ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 08/12] net/colo-compare.c: Make colo-compare support vnet_hdr_len Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 09/12] net/colo.c: Add vnet packet parse feature in colo-proxy Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 10/12] net/colo-compare.c: Add vnet packet's tcp/udp/icmp compare Zhang Chen
2017-05-15  4:11   ` Jason Wang
2017-05-15  8:04     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 11/12] net/filter-rewriter.c: Add new option to enable vnet support for filter-rewriter Zhang Chen
2017-05-15  4:12   ` Jason Wang
2017-05-15  8:05     ` Zhang Chen
2017-05-12  1:41 ` [Qemu-devel] [PATCH V4 12/12] net/filter-rewriter.c: Make filter-rewriter support vnet_hdr_len Zhang Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=adbf3cf7-29c5-13c3-c4ff-d05598c7bb17@redhat.com \
    --to=jasowang@redhat.com \
    --cc=biannm@cn.fujitsu.com \
    --cc=eddie.dong@intel.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.org \
    --cc=weifuqiang@huawei.com \
    --cc=zhang.zhanghailiang@huawei.com \
    --cc=zhangchen.fnst@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).