From: Hailiang Zhang <zhang.zhanghailiang@huawei.com>
To: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>,
lizhijian@cn.fujitsu.com, jasowang@redhat.com
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] colo-compare: fix find_and_check_chardev()
Date: Mon, 10 Oct 2016 14:06:18 +0800 [thread overview]
Message-ID: <57FB2FDA.7000800@huawei.com> (raw)
In-Reply-To: <9bab6585-3de0-6f6b-ae4e-1e4191d40e47@cn.fujitsu.com>
On 2016/10/10 11:49, Zhang Chen wrote:
>
>
> On 10/10/2016 11:13 AM, Hailiang Zhang wrote:
>> Hi,
>>
>> On 2016/10/10 10:52, Zhang Chen wrote:
>>>
>>>
>>> On 09/30/2016 12:06 PM, zhanghailiang wrote:
>>>> find_and_check_chardev() uses 'opts' member of CharDriverState to
>>>> check if the chardev is 'socket' chardev or not, which the opts
>>>> will be NULL if We add the chardev by qmp 'chardev-add' command.
>>>>
>>>> All the related info can be found in 'filename' member of
>>>> CharDriverState,
>>>> For tcp socket device, it will be like
>>>> 'disconnected:tcp:9.61.1.8:9004,server'
>>>> or 'tcp:9.61.1.8:9001,server <-> 9.61.1.8:50256', we can simply
>>>> check it to
>>>> identify if it is a tcp socket char device.
>>>>
>>>> Besides, fix this helper function to return -1 while some errors
>>>> happen.
>>>>
>>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>>
>>> This patch looks fine to me.
>>>
>>
>> Sorry, I found there are still some problems with this modification,
>> For some local connection between filter objects, I think we can use
>> unix socket
>> instead of tcp socket. (Or even other char device, for example file or
>> pipe, but
>> Let's make things simple, we limit it to socket now)
>>
>> So the below check is insufficient, It should be
>>
>> + if (!strstr((*chr)->filename, "tcp:") &&
>> !strstr((*chr)->filename, "unix:")) {
>> error_setg(errp, "chardev \"%s\" is not a tcp socket,
>> filename '%s'",
>> chr_name, (*chr)->filename);
>>
>> If you and Jason agree with this, i will send V2.
>>
>
> I find part of codes in this patch has same with another patch:
>
> net: don't poke at chardev internal QemuOpts
>
I have tested this patch, it can achieve the same function,
So please ignore this patch, thanks.
> I think you can fix and rebase your patch,
> then we need jason's comments for this.
>
>
> Thanks
> Zhang Chen
>
>> Thanks,
>> Hailiang
>>
>>> Reviewed-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>>>
>>> Thanks
>>> Zhang Chen
>>>
>>>> ---
>>>> net/colo-compare.c | 54
>>>> ++++++++----------------------------------------------
>>>> 1 file changed, 8 insertions(+), 46 deletions(-)
>>>>
>>>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>>>> index 22b1da1..6693258 100644
>>>> --- a/net/colo-compare.c
>>>> +++ b/net/colo-compare.c
>>>> @@ -92,10 +92,6 @@ typedef struct CompareClass {
>>>> ObjectClass parent_class;
>>>> } CompareClass;
>>>>
>>>> -typedef struct CompareChardevProps {
>>>> - bool is_socket;
>>>> -} CompareChardevProps;
>>>> -
>>>> enum {
>>>> PRIMARY_IN = 0,
>>>> SECONDARY_IN,
>>>> @@ -564,56 +560,22 @@ static void
>>>> compare_sec_rs_finalize(SocketReadState *sec_rs)
>>>> }
>>>> }
>>>>
>>>> -static int compare_chardev_opts(void *opaque,
>>>> - const char *name, const char *value,
>>>> - Error **errp)
>>>> -{
>>>> - CompareChardevProps *props = opaque;
>>>> -
>>>> - if (strcmp(name, "backend") == 0 &&
>>>> - strcmp(value, "socket") == 0) {
>>>> - props->is_socket = true;
>>>> - return 0;
>>>> - } else if (strcmp(name, "host") == 0 ||
>>>> - (strcmp(name, "port") == 0) ||
>>>> - (strcmp(name, "server") == 0) ||
>>>> - (strcmp(name, "wait") == 0) ||
>>>> - (strcmp(name, "path") == 0)) {
>>>> - return 0;
>>>> - } else {
>>>> - error_setg(errp,
>>>> - "COLO-compare does not support a chardev with
>>>> option %s=%s",
>>>> - name, value);
>>>> - return -1;
>>>> - }
>>>> -}
>>>> -
>>>> -/*
>>>> - * Return 0 is success.
>>>> - * Return 1 is failed.
>>>> - */
>>>> static int find_and_check_chardev(CharDriverState **chr,
>>>> char *chr_name,
>>>> Error **errp)
>>>> {
>>>> - CompareChardevProps props;
>>>> -
>>>> *chr = qemu_chr_find(chr_name);
>>>> if (*chr == NULL) {
>>>> error_setg(errp, "Device '%s' not found",
>>>> chr_name);
>>>> - return 1;
>>>> + return -1;
>>>> }
>>>>
>>>> - memset(&props, 0, sizeof(props));
>>>> - if (qemu_opt_foreach((*chr)->opts, compare_chardev_opts,
>>>> &props, errp)) {
>>>> - return 1;
>>>> - }
>>>> + if (!strstr((*chr)->filename, "tcp")) {
>>>> + error_setg(errp, "chardev \"%s\" is not a tcp socket,
>>>> filename '%s'",
>>>> + chr_name, (*chr)->filename);
>>>> + return -1;
>>>>
>>>> - if (!props.is_socket) {
>>>> - error_setg(errp, "chardev \"%s\" is not a tcp socket",
>>>> - chr_name);
>>>> - return 1;
>>>> }
>>>> return 0;
>>>> }
>>>> @@ -660,15 +622,15 @@ static void
>>>> colo_compare_complete(UserCreatable *uc, Error **errp)
>>>> return;
>>>> }
>>>>
>>>> - if (find_and_check_chardev(&s->chr_pri_in, s->pri_indev, errp)) {
>>>> + if (find_and_check_chardev(&s->chr_pri_in, s->pri_indev, errp)
>>>> < 0) {
>>>> return;
>>>> }
>>>>
>>>> - if (find_and_check_chardev(&s->chr_sec_in, s->sec_indev, errp)) {
>>>> + if (find_and_check_chardev(&s->chr_sec_in, s->sec_indev, errp)
>>>> < 0) {
>>>> return;
>>>> }
>>>>
>>>> - if (find_and_check_chardev(&s->chr_out, s->outdev, errp)) {
>>>> + if (find_and_check_chardev(&s->chr_out, s->outdev, errp) < 0) {
>>>> return;
>>>> }
>>>>
>>>
>>
>>
>>
>> .
>>
>
next prev parent reply other threads:[~2016-10-10 6:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-30 4:06 [Qemu-devel] [PATCH] colo-compare: fix find_and_check_chardev() zhanghailiang
2016-10-10 2:52 ` Zhang Chen
2016-10-10 3:13 ` Hailiang Zhang
2016-10-10 3:49 ` Zhang Chen
2016-10-10 6:06 ` Hailiang Zhang [this message]
2016-10-20 3:53 ` Jason Wang
2016-10-20 4:53 ` Hailiang Zhang
2016-10-21 2:13 ` Jason Wang
2016-10-20 2:12 ` Jason Wang
2016-10-20 4:52 ` Hailiang Zhang
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=57FB2FDA.7000800@huawei.com \
--to=zhang.zhanghailiang@huawei.com \
--cc=jasowang@redhat.com \
--cc=lizhijian@cn.fujitsu.com \
--cc=qemu-devel@nongnu.org \
--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).