diff mbox

[V4,06/12] net/colo-compare.c: Add new option to enable vnet support for colo-compare

Message ID 1494553288-30764-7-git-send-email-zhangchen.fnst@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Zhang Chen May 12, 2017, 1:41 a.m. UTC
We add the vnet_hdr option for colo-compare, default is disable.
If you use virtio-net-pci net driver, please enable it.
You can use it for example:
-object colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0,vnet_hdr=on

Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
 net/colo-compare.c | 34 +++++++++++++++++++++++++++++++++-
 qemu-options.hx    |  3 ++-
 2 files changed, 35 insertions(+), 2 deletions(-)

Comments

Jason Wang May 15, 2017, 4:03 a.m. UTC | #1
On 2017年05月12日 09:41, Zhang Chen wrote:
> We add the vnet_hdr option for colo-compare, default is disable.
> If you use virtio-net-pci net driver, please enable it.
> You can use it for example:
> -object colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0,vnet_hdr=on
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> ---
>   net/colo-compare.c | 34 +++++++++++++++++++++++++++++++++-
>   qemu-options.hx    |  3 ++-
>   2 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 332f57e..99a6912 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -73,6 +73,7 @@ typedef struct CompareState {
>       CharBackend chr_out;
>       SocketReadState pri_rs;
>       SocketReadState sec_rs;
> +    bool vnet_hdr;
>   
>       /* connection list: the connections belonged to this NIC could be found
>        * in this list.
> @@ -642,6 +643,28 @@ static void compare_set_outdev(Object *obj, const char *value, Error **errp)
>       s->outdev = g_strdup(value);
>   }
>   
> +static char *compare_get_vnet_hdr(Object *obj, Error **errp)
> +{
> +    CompareState *s = COLO_COMPARE(obj);
> +
> +    return s->vnet_hdr ? g_strdup("on") : g_strdup("off");
> +}
> +
> +static void compare_set_vnet_hdr(Object *obj,
> +                                 const char *value,
> +                                 Error **errp)
> +{
> +    CompareState *s = COLO_COMPARE(obj);
> +
> +    if (strcmp(value, "on") && strcmp(value, "off")) {
> +        error_setg(errp, "Invalid value for colo-compare vnet_hdr, "
> +                         "should be 'on' or 'off'");
> +        return;
> +    }
> +
> +    s->vnet_hdr = !strcmp(value, "on");
> +}
> +
>   static void compare_pri_rs_finalize(SocketReadState *pri_rs)
>   {
>       CompareState *s = container_of(pri_rs, CompareState, pri_rs);
> @@ -667,7 +690,6 @@ static void compare_sec_rs_finalize(SocketReadState *sec_rs)
>       }
>   }
>   
> -

Unnecessary whitespace change.

>   /*
>    * Return 0 is success.
>    * Return 1 is failed.
> @@ -775,6 +797,8 @@ static void colo_compare_class_init(ObjectClass *oc, void *data)
>   
>   static void colo_compare_init(Object *obj)
>   {
> +    CompareState *s = COLO_COMPARE(obj);
> +
>       object_property_add_str(obj, "primary_in",
>                               compare_get_pri_indev, compare_set_pri_indev,
>                               NULL);
> @@ -784,6 +808,14 @@ static void colo_compare_init(Object *obj)
>       object_property_add_str(obj, "outdev",
>                               compare_get_outdev, compare_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", compare_get_vnet_hdr,
> +                            compare_set_vnet_hdr, NULL);
>   }
>   
>   static void colo_compare_finalize(Object *obj)
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 0f81c22..115b83f 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -4061,12 +4061,13 @@ The file format is libpcap, so it can be analyzed with tools such as tcpdump
>   or Wireshark.
>   
>   @item -object colo-compare,id=@var{id},primary_in=@var{chardevid},secondary_in=@var{chardevid},
> -outdev=@var{chardevid}
> +outdev=@var{chardevid},vnet_hdr=@var{on|off}
>   
>   Colo-compare gets packet from primary_in@var{chardevid} and secondary_in@var{chardevid}, than compare primary packet with
>   secondary packet. If the packets are same, we will output primary
>   packet to outdev@var{chardevid}, else we will notify colo-frame
>   do checkpoint and send primary packet to outdev@var{chardevid}.
> +if vnet_hdr = on, colo compare will send/recv packet with vnet_hdr_len.
>   
>   we must use it with the help of filter-mirror and filter-redirector.
>   

Please squash this into its function implementation.

Thanks
Zhang Chen May 15, 2017, 7:55 a.m. UTC | #2
On 05/15/2017 12:03 PM, Jason Wang wrote:
>
>
> On 2017年05月12日 09:41, Zhang Chen wrote:
>> We add the vnet_hdr option for colo-compare, default is disable.
>> If you use virtio-net-pci net driver, please enable it.
>> You can use it for example:
>> -object 
>> colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0,vnet_hdr=on
>>
>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>> ---
>>   net/colo-compare.c | 34 +++++++++++++++++++++++++++++++++-
>>   qemu-options.hx    |  3 ++-
>>   2 files changed, 35 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>> index 332f57e..99a6912 100644
>> --- a/net/colo-compare.c
>> +++ b/net/colo-compare.c
>> @@ -73,6 +73,7 @@ typedef struct CompareState {
>>       CharBackend chr_out;
>>       SocketReadState pri_rs;
>>       SocketReadState sec_rs;
>> +    bool vnet_hdr;
>>         /* connection list: the connections belonged to this NIC 
>> could be found
>>        * in this list.
>> @@ -642,6 +643,28 @@ static void compare_set_outdev(Object *obj, 
>> const char *value, Error **errp)
>>       s->outdev = g_strdup(value);
>>   }
>>   +static char *compare_get_vnet_hdr(Object *obj, Error **errp)
>> +{
>> +    CompareState *s = COLO_COMPARE(obj);
>> +
>> +    return s->vnet_hdr ? g_strdup("on") : g_strdup("off");
>> +}
>> +
>> +static void compare_set_vnet_hdr(Object *obj,
>> +                                 const char *value,
>> +                                 Error **errp)
>> +{
>> +    CompareState *s = COLO_COMPARE(obj);
>> +
>> +    if (strcmp(value, "on") && strcmp(value, "off")) {
>> +        error_setg(errp, "Invalid value for colo-compare vnet_hdr, "
>> +                         "should be 'on' or 'off'");
>> +        return;
>> +    }
>> +
>> +    s->vnet_hdr = !strcmp(value, "on");
>> +}
>> +
>>   static void compare_pri_rs_finalize(SocketReadState *pri_rs)
>>   {
>>       CompareState *s = container_of(pri_rs, CompareState, pri_rs);
>> @@ -667,7 +690,6 @@ static void 
>> compare_sec_rs_finalize(SocketReadState *sec_rs)
>>       }
>>   }
>>   -
>
> Unnecessary whitespace change.

I will remove it in next version.

>
>>   /*
>>    * Return 0 is success.
>>    * Return 1 is failed.
>> @@ -775,6 +797,8 @@ static void colo_compare_class_init(ObjectClass 
>> *oc, void *data)
>>     static void colo_compare_init(Object *obj)
>>   {
>> +    CompareState *s = COLO_COMPARE(obj);
>> +
>>       object_property_add_str(obj, "primary_in",
>>                               compare_get_pri_indev, 
>> compare_set_pri_indev,
>>                               NULL);
>> @@ -784,6 +808,14 @@ static void colo_compare_init(Object *obj)
>>       object_property_add_str(obj, "outdev",
>>                               compare_get_outdev, compare_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", compare_get_vnet_hdr,
>> +                            compare_set_vnet_hdr, NULL);
>>   }
>>     static void colo_compare_finalize(Object *obj)
>> diff --git a/qemu-options.hx b/qemu-options.hx
>> index 0f81c22..115b83f 100644
>> --- a/qemu-options.hx
>> +++ b/qemu-options.hx
>> @@ -4061,12 +4061,13 @@ The file format is libpcap, so it can be 
>> analyzed with tools such as tcpdump
>>   or Wireshark.
>>     @item -object 
>> colo-compare,id=@var{id},primary_in=@var{chardevid},secondary_in=@var{chardevid},
>> -outdev=@var{chardevid}
>> +outdev=@var{chardevid},vnet_hdr=@var{on|off}
>>     Colo-compare gets packet from primary_in@var{chardevid} and 
>> secondary_in@var{chardevid}, than compare primary packet with
>>   secondary packet. If the packets are same, we will output primary
>>   packet to outdev@var{chardevid}, else we will notify colo-frame
>>   do checkpoint and send primary packet to outdev@var{chardevid}.
>> +if vnet_hdr = on, colo compare will send/recv packet with vnet_hdr_len.
>>     we must use it with the help of filter-mirror and filter-redirector.
>
> Please squash this into its function implementation.

OK.
Thanks
Zhang Chen

>
> Thanks
>
>
> .
>
diff mbox

Patch

diff --git a/net/colo-compare.c b/net/colo-compare.c
index 332f57e..99a6912 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -73,6 +73,7 @@  typedef struct CompareState {
     CharBackend chr_out;
     SocketReadState pri_rs;
     SocketReadState sec_rs;
+    bool vnet_hdr;
 
     /* connection list: the connections belonged to this NIC could be found
      * in this list.
@@ -642,6 +643,28 @@  static void compare_set_outdev(Object *obj, const char *value, Error **errp)
     s->outdev = g_strdup(value);
 }
 
+static char *compare_get_vnet_hdr(Object *obj, Error **errp)
+{
+    CompareState *s = COLO_COMPARE(obj);
+
+    return s->vnet_hdr ? g_strdup("on") : g_strdup("off");
+}
+
+static void compare_set_vnet_hdr(Object *obj,
+                                 const char *value,
+                                 Error **errp)
+{
+    CompareState *s = COLO_COMPARE(obj);
+
+    if (strcmp(value, "on") && strcmp(value, "off")) {
+        error_setg(errp, "Invalid value for colo-compare vnet_hdr, "
+                         "should be 'on' or 'off'");
+        return;
+    }
+
+    s->vnet_hdr = !strcmp(value, "on");
+}
+
 static void compare_pri_rs_finalize(SocketReadState *pri_rs)
 {
     CompareState *s = container_of(pri_rs, CompareState, pri_rs);
@@ -667,7 +690,6 @@  static void compare_sec_rs_finalize(SocketReadState *sec_rs)
     }
 }
 
-
 /*
  * Return 0 is success.
  * Return 1 is failed.
@@ -775,6 +797,8 @@  static void colo_compare_class_init(ObjectClass *oc, void *data)
 
 static void colo_compare_init(Object *obj)
 {
+    CompareState *s = COLO_COMPARE(obj);
+
     object_property_add_str(obj, "primary_in",
                             compare_get_pri_indev, compare_set_pri_indev,
                             NULL);
@@ -784,6 +808,14 @@  static void colo_compare_init(Object *obj)
     object_property_add_str(obj, "outdev",
                             compare_get_outdev, compare_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", compare_get_vnet_hdr,
+                            compare_set_vnet_hdr, NULL);
 }
 
 static void colo_compare_finalize(Object *obj)
diff --git a/qemu-options.hx b/qemu-options.hx
index 0f81c22..115b83f 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -4061,12 +4061,13 @@  The file format is libpcap, so it can be analyzed with tools such as tcpdump
 or Wireshark.
 
 @item -object colo-compare,id=@var{id},primary_in=@var{chardevid},secondary_in=@var{chardevid},
-outdev=@var{chardevid}
+outdev=@var{chardevid},vnet_hdr=@var{on|off}
 
 Colo-compare gets packet from primary_in@var{chardevid} and secondary_in@var{chardevid}, than compare primary packet with
 secondary packet. If the packets are same, we will output primary
 packet to outdev@var{chardevid}, else we will notify colo-frame
 do checkpoint and send primary packet to outdev@var{chardevid}.
+if vnet_hdr = on, colo compare will send/recv packet with vnet_hdr_len.
 
 we must use it with the help of filter-mirror and filter-redirector.