All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
To: Jason Wang <jasowang@redhat.com>, qemu devel <qemu-devel@nongnu.org>
Cc: Li Zhijian <lizhijian@cn.fujitsu.com>,
	"eddie . dong" <eddie.dong@intel.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	zhanghailiang <zhang.zhanghailiang@huawei.com>
Subject: Re: [Qemu-devel] [RFC PATCH V2 2/3] filter-rewriter: track connection and parse packet
Date: Mon, 4 Jul 2016 15:47:33 +0800	[thread overview]
Message-ID: <577A1495.2020101@cn.fujitsu.com> (raw)
In-Reply-To: <5779D240.6080407@redhat.com>



On 07/04/2016 11:04 AM, Jason Wang wrote:
>
>
> On 2016年07月02日 14:22, Zhang Chen wrote:
>> We use colo-base.h to track connection and parse packet
>>
>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
>> ---
>>   net/filter-rewriter.c | 52 
>> +++++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 52 insertions(+)
>>
>> diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
>> index 08b015d..c38ab24 100644
>> --- a/net/filter-rewriter.c
>> +++ b/net/filter-rewriter.c
>> @@ -50,6 +50,20 @@ typedef struct RewriterState {
>>       uint32_t hashtable_size;
>>   } RewriterState;
>>   +/*
>> + * Return 1 on success, if return 0 means the pkt
>> + * is not TCP packet
>> + */
>> +static int is_tcp_packet(Packet *pkt)
>> +{
>> +    if (!parse_packet_early(pkt) &&
>> +        pkt->ip->ip_p == IPPROTO_TCP) {
>> +        return 1;
>> +    } else {
>> +        return 0;
>> +    }
>> +}
>> +
>>   static ssize_t colo_rewriter_receive_iov(NetFilterState *nf,
>>                                            NetClientState *sender,
>>                                            unsigned flags,
>> @@ -57,11 +71,49 @@ static ssize_t 
>> colo_rewriter_receive_iov(NetFilterState *nf,
>>                                            int iovcnt,
>>                                            NetPacketSent *sent_cb)
>>   {
>> +    RewriterState *s = FILTER_COLO_REWRITER(nf);
>> +    Connection *conn;
>> +    ConnectionKey key = {{ 0 } };
>> +    Packet *pkt;
>> +    ssize_t size = iov_size(iov, iovcnt);
>> +    char *buf = g_malloc0(size);
>> +
>> +    iov_to_buf(iov, iovcnt, 0, buf, size);
>> +    pkt = packet_new(buf, size);
>> +
>>       /*
>>        * if we get tcp packet
>>        * we will rewrite it to make secondary guest's
>>        * connection established successfully
>>        */
>> +    if (is_tcp_packet(pkt)) {
>> +        if (sender == nf->netdev) {
>> +            fill_connection_key(pkt, &key, SECONDARY);
>> +        } else {
>> +            fill_connection_key(pkt, &key, PRIMARY);
>> +        }
>> +
>> +        conn = connection_get(s->connection_track_table,
>> +                              &key,
>> +                              &s->hashtable_size);
>> +        if (!conn->processing) {
>> +            qemu_mutex_lock(&s->conn_list_lock);
>> +            g_queue_push_tail(&s->conn_list, conn);
>> +            qemu_mutex_unlock(&s->conn_list_lock);
>
> conn_list was never used in this series, and I fail to understand why 
> conn_list is needed?

When filter-rewriter work with colo-frame we need this do some 
synchronization job.
like colo do checkpoint,we will flush connection.
Maybe I should move this lock to other patch (like filter-rewriter work 
with colo-frame).

Thanks
Zhang Chen

>
>> +            conn->processing = true;
>> +        }
>> +
>> +        if (sender == nf->netdev) {
>> +            /* NET_FILTER_DIRECTION_TX */
>> +            /* handle_primary_tcp_pkt */
>> +        } else {
>> +            /* NET_FILTER_DIRECTION_RX */
>> +            /* handle_secondary_tcp_pkt */
>> +        }
>> +    }
>> +
>> +    packet_destroy(pkt, NULL);
>> +    pkt = NULL;
>>       return 0;
>>   }
>
>
>
> .
>

-- 
Thanks
zhangchen

  reply	other threads:[~2016-07-04  7:46 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-02  6:22 [Qemu-devel] [RFC PATCH V2 0/3] filter-rewriter: introduce filter-rewriter Zhang Chen
2016-07-02  6:22 ` [Qemu-devel] [RFC PATCH V2 1/3] filter-rewriter: introduce filter-rewriter initialization Zhang Chen
2016-07-04  2:49   ` Jason Wang
2016-07-04  7:42     ` Zhang Chen
2016-07-04  8:28       ` Jason Wang
2016-07-02  6:22 ` [Qemu-devel] [RFC PATCH V2 2/3] filter-rewriter: track connection and parse packet Zhang Chen
2016-07-04  3:04   ` Jason Wang
2016-07-04  7:47     ` Zhang Chen [this message]
2016-07-04  8:29       ` Jason Wang
2016-07-02  6:22 ` [Qemu-devel] [RFC PATCH V2 3/3] filter-rewriter: rewrite tcp packet to keep secondary connection Zhang Chen
2016-07-04  3:16   ` Jason Wang
2016-07-04  8:59     ` 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=577A1495.2020101@cn.fujitsu.com \
    --to=zhangchen.fnst@cn.fujitsu.com \
    --cc=dgilbert@redhat.com \
    --cc=eddie.dong@intel.com \
    --cc=jasowang@redhat.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.org \
    --cc=zhang.zhanghailiang@huawei.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.