[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH COLO-Frame v8 23/34] tap: Make launch_script() p
From: |
Jason Wang |
Subject: |
Re: [Qemu-devel] [PATCH COLO-Frame v8 23/34] tap: Make launch_script() public |
Date: |
Wed, 29 Jul 2015 17:24:12 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 |
On 07/29/2015 05:17 PM, zhanghailiang wrote:
> On 2015/7/29 16:57, Jason Wang wrote:
>>
>>
>> On 07/29/2015 04:45 PM, zhanghailiang wrote:
>>> We also change the parameters of launch_script().
>>
>> A quick question (I don't go through the codes tough). What's the plan
>> for management(libvirt)? I believe some setup (iptables, fd creation)
>> should be offloaded to management (libvirt)?
>>
>
> Er, yes, the better way for setup is in libvirt, we didn't look into it
> deeply, but it was in our TODO list before, since our first step is to
> merge colo's qemu part,
> if we realize colo proxy in qemu, it seems to be more simple than this
> inconvenient way.
Please consider this as early as possible. The issue is probably not
convenience but security. Running qemu as root is dangerous, that's why
most of the setup was done through management.
Thanks
>
>> Thanks
>>
>>> Cc: Stefan Hajnoczi <address@hidden>
>>> Cc: Jason Wang <address@hidden>
>>> Signed-off-by: zhanghailiang <address@hidden>
>>> Signed-off-by: Li Zhijian <address@hidden>
>>> ---
>>> include/net/tap.h | 2 ++
>>> net/tap.c | 31 ++++++++++++++++++-------------
>>> 2 files changed, 20 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/include/net/tap.h b/include/net/tap.h
>>> index 5da4edc..ac99b31 100644
>>> --- a/include/net/tap.h
>>> +++ b/include/net/tap.h
>>> @@ -38,4 +38,6 @@ int tap_get_fd(NetClientState *nc);
>>> struct vhost_net;
>>> struct vhost_net *tap_get_vhost_net(NetClientState *nc);
>>>
>>> +void launch_script(char *const args[], int fd, Error **errp);
>>> +
>>> #endif /* QEMU_NET_TAP_H */
>>> diff --git a/net/tap.c b/net/tap.c
>>> index c2135cd..a715636 100644
>>> --- a/net/tap.c
>>> +++ b/net/tap.c
>>> @@ -60,9 +60,6 @@ typedef struct TAPState {
>>> unsigned host_vnet_hdr_len;
>>> } TAPState;
>>>
>>> -static void launch_script(const char *setup_script, const char
>>> *ifname,
>>> - int fd, Error **errp);
>>> -
>>> static void tap_send(void *opaque);
>>> static void tap_writable(void *opaque);
>>>
>>> @@ -305,7 +302,14 @@ static void tap_cleanup(NetClientState *nc)
>>> qemu_purge_queued_packets(nc);
>>>
>>> if (s->down_script[0]) {
>>> - launch_script(s->down_script, s->down_script_arg, s->fd,
>>> &err);
>>> + char *args[3];
>>> + char **parg;
>>> +
>>> + parg = args;
>>> + *parg++ = (char *)s->down_script;
>>> + *parg++ = (char *)s->down_script_arg;
>>> + *parg = NULL;
>>> + launch_script(args, s->fd, &err);
>>> if (err) {
>>> error_report_err(err);
>>> }
>>> @@ -382,12 +386,10 @@ static TAPState
>>> *net_tap_fd_init(NetClientState *peer,
>>> return s;
>>> }
>>>
>>> -static void launch_script(const char *setup_script, const char
>>> *ifname,
>>> - int fd, Error **errp)
>>> +void launch_script(char *const args[], int fd, Error **errp)
>>> {
>>> int pid, status;
>>> - char *args[3];
>>> - char **parg;
>>> + const char *setup_script = args[0];
>>>
>>> /* try to launch network script */
>>> pid = fork();
>>> @@ -404,10 +406,6 @@ static void launch_script(const char
>>> *setup_script, const char *ifname,
>>> close(i);
>>> }
>>> }
>>> - parg = args;
>>> - *parg++ = (char *)setup_script;
>>> - *parg++ = (char *)ifname;
>>> - *parg = NULL;
>>> execv(setup_script, args);
>>> _exit(1);
>>> } else {
>>> @@ -611,7 +609,14 @@ static int net_tap_init(const NetdevTapOptions
>>> *tap, int *vnet_hdr,
>>> if (setup_script &&
>>> setup_script[0] != '\0' &&
>>> strcmp(setup_script, "no") != 0) {
>>> - launch_script(setup_script, ifname, fd, &err);
>>> + char *args[3];
>>> + char **parg;
>>> + parg = args;
>>> + *parg++ = (char *)setup_script;
>>> + *parg++ = (char *)ifname;
>>> + *parg = NULL;
>>> +
>>> + launch_script(args, fd, &err);
>>> if (err) {
>>> error_propagate(errp, err);
>>> close(fd);
>>
>>
>> .
>>
>
>
- [Qemu-devel] [PATCH COLO-Frame v8 17/34] COLO failover: Introduce state to record failover process, (continued)
- [Qemu-devel] [PATCH COLO-Frame v8 17/34] COLO failover: Introduce state to record failover process, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 11/34] COLO: Save VM state to slave when do checkpoint, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 13/34] COLO VMstate: Load VM state into qsb before restore it, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 22/34] COLO NIC: Init/remove colo nic devices when add/cleanup tap devices, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 16/34] COLO failover: Introduce a new command to trigger a failover, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 14/34] arch_init: Start to trace dirty pages of SVM, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 20/34] COLO failover: Don't do failover during loading VM's state, zhanghailiang, 2015/07/29
- [Qemu-devel] [PATCH COLO-Frame v8 23/34] tap: Make launch_script() public, zhanghailiang, 2015/07/29
- Re: [Qemu-devel] [PATCH COLO-Frame v8 23/34] tap: Make launch_script() public, Daniel P. Berrange, 2015/07/29
- Re: [Qemu-devel] [PATCH COLO-Frame v8 23/34] tap: Make launch_script() public, Dr. David Alan Gilbert, 2015/07/29
[Qemu-devel] [PATCH COLO-Frame v8 04/34] colo-comm/migration: skip colo info section for special cases, zhanghailiang, 2015/07/29
[Qemu-devel] [PATCH COLO-Frame v8 15/34] COLO RAM: Flush cached RAM into SVM's memory, zhanghailiang, 2015/07/29
[Qemu-devel] [PATCH COLO-Frame v8 25/34] colo-nic: Handle secondary VM's original net device configure, zhanghailiang, 2015/07/29
[Qemu-devel] [PATCH COLO-Frame v8 26/34] COLO NIC: Implement colo nic init/destroy function, zhanghailiang, 2015/07/29
[Qemu-devel] [PATCH COLO-Frame v8 18/34] COLO failover: Implement COLO primary/secondary vm failover work, zhanghailiang, 2015/07/29