1. 27 9月, 2016 5 次提交
    • Z
      colo-compare: add TCP, UDP, ICMP packet comparison · f4b61836
      Zhang Chen 提交于
      We add TCP,UDP,ICMP packet comparison to replace
      IP packet comparison. This can increase the
      accuracy of the package comparison.
      Less checkpoint more efficiency.
      Signed-off-by: NZhang Chen <zhangchen.fnst@cn.fujitsu.com>
      Signed-off-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      f4b61836
    • Z
      colo-compare: introduce packet comparison thread · 0682e15b
      Zhang Chen 提交于
      If primary packet is same with secondary packet,
      we will send primary packet and drop secondary
      packet, otherwise notify COLO frame to do checkpoint.
      If primary packet comes but secondary packet does not,
      after REGULAR_PACKET_CHECK_MS milliseconds we set
      the primary packet as old_packet,then do a checkpoint.
      Signed-off-by: NZhang Chen <zhangchen.fnst@cn.fujitsu.com>
      Signed-off-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      0682e15b
    • Z
      colo-compare: track connection and enqueue packet · b6540d40
      Zhang Chen 提交于
      In this patch we use kernel jhash table to track
      connection, and then enqueue net packet like this:
      
      + CompareState ++
      |               |
      +---------------+   +---------------+         +---------------+
      |conn list      +--->conn           +--------->conn           |
      +---------------+   +---------------+         +---------------+
      |               |     |           |             |          |
      +---------------+ +---v----+  +---v----+    +---v----+ +---v----+
                        |primary |  |secondary    |primary | |secondary
                        |packet  |  |packet  +    |packet  | |packet  +
                        +--------+  +--------+    +--------+ +--------+
                            |           |             |          |
                        +---v----+  +---v----+    +---v----+ +---v----+
                        |primary |  |secondary    |primary | |secondary
                        |packet  |  |packet  +    |packet  | |packet  +
                        +--------+  +--------+    +--------+ +--------+
                            |           |             |          |
                        +---v----+  +---v----+    +---v----+ +---v----+
                        |primary |  |secondary    |primary | |secondary
                        |packet  |  |packet  +    |packet  | |packet  +
                        +--------+  +--------+    +--------+ +--------+
      
      We use conn_list to record connection info.
      When we want to enqueue a packet, firstly get the
      connection from connection_track_table. then push
      the packet to g_queue(pri/sec) in it's own conn.
      Signed-off-by: NZhang Chen <zhangchen.fnst@cn.fujitsu.com>
      Signed-off-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      b6540d40
    • Z
      net/colo.c: add colo.c to define and handle packet · 59509ec1
      Zhang Chen 提交于
      The net/colo.c is used by colo-compare and filter-rewriter.
      this can share common data structure like net packet,
      and other functions.
      Signed-off-by: NZhang Chen <zhangchen.fnst@cn.fujitsu.com>
      Signed-off-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      59509ec1
    • Z
      colo-compare: introduce colo compare initialization · 7dce4e6f
      Zhang Chen 提交于
      This a COLO net ascii figure:
      
       Primary qemu                                                           Secondary qemu
      +--------------------------------------------------------------+       +----------------------------------------------------------------+
      | +----------------------------------------------------------+ |       |  +-----------------------------------------------------------+ |
      | |                                                          | |       |  |                                                           | |
      | |                        guest                             | |       |  |                        guest                              | |
      | |                                                          | |       |  |                                                           | |
      | +-------^--------------------------+-----------------------+ |       |  +---------------------+--------+----------------------------+ |
      |         |                          |                         |       |                        ^        |                              |
      |         |                          |                         |       |                        |        |                              |
      |         |  +------------------------------------------------------+  |                        |        |                              |
      |netfilter|  |                       |                         |    |  |   netfilter            |        |                              |
      | +----------+ +----------------------------+                  |    |  |  +-----------------------------------------------------------+ |
      | |       |  |                       |      |        out       |    |  |  |                     |        |  filter excute order       | |
      | |       |  |          +-----------------------------+        |    |  |  |                     |        | +------------------->      | |
      | |       |  |          |            |      |         |        |    |  |  |                     |        |   TCP                      | |
      | | +-----+--+-+  +-----v----+ +-----v----+ |pri +----+----+sec|    |  |  | +------------+  +---+----+---v+rewriter++  +------------+ | |
      | | |          |  |          | |          | |in  |         |in |    |  |  | |            |  |        |              |  |            | | |
      | | |  filter  |  |  filter  | |  filter  +------>  colo   <------+ +-------->  filter   +--> adjust |   adjust     +-->   filter   | | |
      | | |  mirror  |  |redirector| |redirector| |    | compare |   |  |    |  | | redirector |  | ack    |   seq        |  | redirector | | |
      | | |          |  |          | |          | |    |         |   |  |    |  | |            |  |        |              |  |            | | |
      | | +----^-----+  +----+-----+ +----------+ |    +---------+   |  |    |  | +------------+  +--------+--------------+  +---+--------+ | |
      | |      |   tx        |   rx           rx  |                  |  |    |  |            tx                        all       |  rx      | |
      | |      |             |                    |                  |  |    |  +-----------------------------------------------------------+ |
      | |      |             +--------------+     |                  |  |    |                                                   |            |
      | |      |   filter excute order      |     |                  |  |    |                                                   |            |
      | |      |  +---------------->        |     |                  |  +--------------------------------------------------------+            |
      | +-----------------------------------------+                  |       |                                                                |
      |        |                            |                        |       |                                                                |
      +--------------------------------------------------------------+       +----------------------------------------------------------------+
               |guest receive               | guest send
               |                            |
      +--------+----------------------------v------------------------+
      |                                                              |                          NOTE: filter direction is rx/tx/all
      |                         tap                                  |                          rx:receive packets sent to the netdev
      |                                                              |                          tx:receive packets sent by the netdev
      +--------------------------------------------------------------+
      
      In COLO-compare, we do packet comparing job.
      Packets coming from the primary char indev will be sent to outdev.
      Packets coming from the secondary char dev will be dropped after comparing.
      colo-comapre need two input chardev and one output chardev:
      primary_in=chardev1-id (source: primary send packet)
      secondary_in=chardev2-id (source: secondary send packet)
      outdev=chardev3-id
      
      usage:
      
      primary:
      -netdev tap,id=hn0,vhost=off,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
      -device e1000,id=e0,netdev=hn0,mac=52:a4:00:12:78:66
      -chardev socket,id=mirror0,host=3.3.3.3,port=9003,server,nowait
      -chardev socket,id=compare1,host=3.3.3.3,port=9004,server,nowait
      -chardev socket,id=compare0,host=3.3.3.3,port=9001,server,nowait
      -chardev socket,id=compare0-0,host=3.3.3.3,port=9001
      -chardev socket,id=compare_out,host=3.3.3.3,port=9005,server,nowait
      -chardev socket,id=compare_out0,host=3.3.3.3,port=9005
      -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0
      -object filter-redirector,netdev=hn0,id=redire0,queue=rx,indev=compare_out
      -object filter-redirector,netdev=hn0,id=redire1,queue=rx,outdev=compare0
      -object colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0
      
      secondary:
      -netdev tap,id=hn0,vhost=off,script=/etc/qemu-ifup,down script=/etc/qemu-ifdown
      -device e1000,netdev=hn0,mac=52:a4:00:12:78:66
      -chardev socket,id=red0,host=3.3.3.3,port=9003
      -chardev socket,id=red1,host=3.3.3.3,port=9004
      -object filter-redirector,id=f1,netdev=hn0,queue=tx,indev=red0
      -object filter-redirector,id=f2,netdev=hn0,queue=rx,outdev=red1
      Signed-off-by: NZhang Chen <zhangchen.fnst@cn.fujitsu.com>
      Signed-off-by: NLi Zhijian <lizhijian@cn.fujitsu.com>
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      7dce4e6f