Revision dd51058d

b/net.c
1732 1732
                        int port, const char *group, int mode)
1733 1733
{
1734 1734
    VDEState *s;
1735
    char *init_group = strlen(group) ? (char *)group : NULL;
1736
    char *init_sock = strlen(sock) ? (char *)sock : NULL;
1735
    char *init_group = (char *)group;
1736
    char *init_sock = (char *)sock;
1737 1737

  
1738 1738
    struct vde_open_args args = {
1739 1739
        .port = port,
......
2718 2718
    return 0;
2719 2719
}
2720 2720

  
2721
#ifdef CONFIG_VDE
2722
static int net_init_vde(QemuOpts *opts, Monitor *mon)
2723
{
2724
    VLANState *vlan;
2725
    const char *name;
2726
    const char *sock;
2727
    const char *group;
2728
    int port, mode;
2729

  
2730
    vlan = qemu_find_vlan(qemu_opt_get_number(opts, "vlan", 0), 1);
2731

  
2732
    name  = qemu_opt_get(opts, "name");
2733
    sock  = qemu_opt_get(opts, "sock");
2734
    group = qemu_opt_get(opts, "group");
2735

  
2736
    port = qemu_opt_get_number(opts, "port", 0);
2737
    mode = qemu_opt_get_number(opts, "mode", 0700);
2738

  
2739
    if (net_vde_init(vlan, "vde", name, sock, port, group, mode) == -1) {
2740
        return -1;
2741
    }
2742

  
2743
    vlan->nb_host_devs++;
2744

  
2745
    return 0;
2746
}
2747
#endif
2748

  
2721 2749
#define NET_COMMON_PARAMS_DESC                     \
2722 2750
    {                                              \
2723 2751
        .name = "type",                            \
......
2904 2932
            },
2905 2933
            { /* end of list */ }
2906 2934
        },
2935
#ifdef CONFIG_VDE
2936
    }, {
2937
        .type = "vde",
2938
        .init = net_init_vde,
2939
        .desc = {
2940
            NET_COMMON_PARAMS_DESC,
2941
            {
2942
                .name = "sock",
2943
                .type = QEMU_OPT_STRING,
2944
                .help = "socket path",
2945
            }, {
2946
                .name = "port",
2947
                .type = QEMU_OPT_NUMBER,
2948
                .help = "port number",
2949
            }, {
2950
                .name = "group",
2951
                .type = QEMU_OPT_STRING,
2952
                .help = "group owner of socket",
2953
            }, {
2954
                .name = "mode",
2955
                .type = QEMU_OPT_NUMBER,
2956
                .help = "permissions for socket",
2957
            },
2958
            { /* end of list */ }
2959
        },
2960
#endif
2907 2961
    },
2908 2962
    { /* end of list */ }
2909 2963
};
......
2948 3002
        !strcmp(device, "nic") ||
2949 3003
        !strcmp(device, "user") ||
2950 3004
        !strcmp(device, "tap") ||
2951
        !strcmp(device, "socket")) {
3005
        !strcmp(device, "socket") ||
3006
        !strcmp(device, "vde")) {
2952 3007
        QemuOpts *opts;
2953 3008

  
2954 3009
        opts = qemu_opts_parse(&qemu_net_opts, p, NULL);
......
2987 3042
        }
2988 3043
    } else
2989 3044
#endif
2990
#ifdef CONFIG_VDE
2991
    if (!strcmp(device, "vde")) {
2992
        static const char * const vde_params[] = {
2993
            "vlan", "name", "sock", "port", "group", "mode", NULL
2994
        };
2995
        char vde_sock[1024], vde_group[512];
2996
	int vde_port, vde_mode;
2997

  
2998
        if (check_params(buf, sizeof(buf), vde_params, p) < 0) {
2999
            qemu_error("invalid parameter '%s' in '%s'\n", buf, p);
3000
            ret = -1;
3001
            goto out;
3002
        }
3003
        vlan->nb_host_devs++;
3004
        if (get_param_value(vde_sock, sizeof(vde_sock), "sock", p) <= 0) {
3005
	    vde_sock[0] = '\0';
3006
	}
3007
	if (get_param_value(buf, sizeof(buf), "port", p) > 0) {
3008
	    vde_port = strtol(buf, NULL, 10);
3009
	} else {
3010
	    vde_port = 0;
3011
	}
3012
	if (get_param_value(vde_group, sizeof(vde_group), "group", p) <= 0) {
3013
	    vde_group[0] = '\0';
3014
	}
3015
	if (get_param_value(buf, sizeof(buf), "mode", p) > 0) {
3016
	    vde_mode = strtol(buf, NULL, 8);
3017
	} else {
3018
	    vde_mode = 0700;
3019
	}
3020
	ret = net_vde_init(vlan, device, name, vde_sock, vde_port, vde_group, vde_mode);
3021
    } else
3022
#endif
3023 3045
    if (!strcmp(device, "dump")) {
3024 3046
        int len = 65536;
3025 3047

  

Also available in: Unified diff