mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Final net cleanup after conversion to QemuOpts
Now that net_client_init() has no users, kill it off and rename net_client_init_from_opts(). There is no further need for the old code in net_client_parse() either. We use qemu_opts_parse() 'firstname' facitity for that. Instead, move the special handling of the 'vmchannel' type there. Simplify the vl.c code into merely call net_client_parse() for each -net command line option and then calling net_init_clients() later to iterate over the options and create the clients. Signed-off-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
c59c7ea947
commit
dc1c9fe8b7
4 changed files with 65 additions and 86 deletions
116
net.c
116
net.c
|
@ -3001,7 +3001,7 @@ static struct {
|
|||
{ /* end of list */ }
|
||||
};
|
||||
|
||||
int net_client_init_from_opts(Monitor *mon, QemuOpts *opts)
|
||||
int net_client_init(Monitor *mon, QemuOpts *opts)
|
||||
{
|
||||
const char *type;
|
||||
int i;
|
||||
|
@ -3030,41 +3030,6 @@ int net_client_init_from_opts(Monitor *mon, QemuOpts *opts)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int net_client_init(Monitor *mon, const char *device, const char *p)
|
||||
{
|
||||
QemuOpts *opts;
|
||||
|
||||
#ifdef CONFIG_SLIRP
|
||||
if (!strcmp(device, "channel")) {
|
||||
int ret;
|
||||
|
||||
if (QTAILQ_EMPTY(&slirp_stacks)) {
|
||||
struct slirp_config_str *config;
|
||||
|
||||
config = qemu_malloc(sizeof(*config));
|
||||
pstrcpy(config->str, sizeof(config->str), p);
|
||||
config->flags = SLIRP_CFG_LEGACY;
|
||||
config->next = slirp_configs;
|
||||
slirp_configs = config;
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = slirp_guestfwd(QTAILQ_FIRST(&slirp_stacks), p, 1);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
opts = qemu_opts_parse(&qemu_net_opts, p, NULL);
|
||||
if (!opts) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
qemu_opt_set(opts, "type", device);
|
||||
|
||||
return net_client_init_from_opts(mon, opts);
|
||||
}
|
||||
|
||||
void net_client_uninit(NICInfo *nd)
|
||||
{
|
||||
nd->vlan->nb_guest_devs--;
|
||||
|
@ -3118,7 +3083,7 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
|
|||
|
||||
qemu_opt_set(opts, "type", device);
|
||||
|
||||
if (net_client_init_from_opts(mon, opts) < 0) {
|
||||
if (net_client_init(mon, opts) < 0) {
|
||||
monitor_printf(mon, "adding host network device %s failed\n", device);
|
||||
}
|
||||
}
|
||||
|
@ -3140,26 +3105,6 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
|
|||
qemu_del_vlan_client(vc);
|
||||
}
|
||||
|
||||
int net_client_parse(const char *str)
|
||||
{
|
||||
const char *p;
|
||||
char *q;
|
||||
char device[64];
|
||||
|
||||
p = str;
|
||||
q = device;
|
||||
while (*p != '\0' && *p != ',') {
|
||||
if ((q - device) < sizeof(device) - 1)
|
||||
*q++ = *p;
|
||||
p++;
|
||||
}
|
||||
*q = '\0';
|
||||
if (*p == ',')
|
||||
p++;
|
||||
|
||||
return net_client_init(NULL, device, p);
|
||||
}
|
||||
|
||||
void net_set_boot_mask(int net_boot_mask)
|
||||
{
|
||||
int i;
|
||||
|
@ -3240,7 +3185,7 @@ void net_cleanup(void)
|
|||
}
|
||||
}
|
||||
|
||||
void net_client_check(void)
|
||||
static void net_check_clients(void)
|
||||
{
|
||||
VLANState *vlan;
|
||||
|
||||
|
@ -3255,3 +3200,58 @@ void net_client_check(void)
|
|||
vlan->id);
|
||||
}
|
||||
}
|
||||
|
||||
static int net_init_client(QemuOpts *opts, void *dummy)
|
||||
{
|
||||
return net_client_init(NULL, opts);
|
||||
}
|
||||
|
||||
int net_init_clients(void)
|
||||
{
|
||||
if (QTAILQ_EMPTY(&qemu_net_opts.head)) {
|
||||
/* if no clients, we use a default config */
|
||||
qemu_opts_set(&qemu_net_opts, NULL, "type", "nic");
|
||||
#ifdef CONFIG_SLIRP
|
||||
qemu_opts_set(&qemu_net_opts, NULL, "type", "user");
|
||||
#endif
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(&qemu_net_opts, net_init_client, NULL, 1) == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
net_check_clients();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int net_client_parse(const char *optarg)
|
||||
{
|
||||
/* handle legacy -net channel,port:chr */
|
||||
if (!strncmp(optarg, "channel,", strlen("channel,"))) {
|
||||
int ret;
|
||||
|
||||
optarg += strlen("channel,");
|
||||
|
||||
if (QTAILQ_EMPTY(&slirp_stacks)) {
|
||||
struct slirp_config_str *config;
|
||||
|
||||
config = qemu_malloc(sizeof(*config));
|
||||
pstrcpy(config->str, sizeof(config->str), optarg);
|
||||
config->flags = SLIRP_CFG_LEGACY;
|
||||
config->next = slirp_configs;
|
||||
slirp_configs = config;
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = slirp_guestfwd(QTAILQ_FIRST(&slirp_stacks), optarg, 1);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!qemu_opts_parse(&qemu_net_opts, optarg, "type")) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue