dm:change virtio-net parameters for cmdline

Remove device name requirement for “tap” and "vmnet", change the
parameter format like:
"-s 4,virtio-net,tap/vmnet=dev_name".

Tracked-On: #6690
Acked-by: Yu1 Wang <yu1.wang@intel.com>
Signed-off-by: Chenli Wei <chenli.wei@linux.intel.com>
This commit is contained in:
Chenli Wei 2022-01-26 15:29:20 +08:00 committed by acrnsi-robot
parent cbd593e6c0
commit d755205c8d
2 changed files with 31 additions and 10 deletions

View File

@ -341,6 +341,10 @@ pci_parse_slot(char *opt)
/* saved fi param in case reboot */
si->si_funcs[fnum].fi_param_saved = config;
if (strcmp("virtio-net", emul) == 0) {
si->si_funcs[fnum].fi_param_saved = cp;
}
if (b != NULL) {
if ((strcmp("virtio-blk", emul) == 0) && (b != NULL) &&
(strchr(b, 'b') != NULL)) {

View File

@ -817,7 +817,11 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
char nstr[80];
char tname[MAXCOMLEN + 1];
struct virtio_net *net;
char *devname = NULL;
char fname[IFNAMSIZ];
char *devopts = NULL;
char *name = NULL;
char *type = NULL;
char *tmp;
char *vtopts;
char *opt;
int mac_provided;
@ -852,8 +856,8 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
if (opts != NULL) {
int err;
devname = vtopts = strdup(opts);
if (!devname) {
devopts = vtopts = strdup(opts);
if (!devopts) {
WPRINTF(("virtio_net: strdup returns NULL\n"));
free(net);
return -1;
@ -868,7 +872,7 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
err = virtio_net_parsemac(opt,
net->config.mac);
if (err != 0) {
free(devname);
free(devopts);
free(net);
return err;
}
@ -896,17 +900,27 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
*/
net->tapfd = -1;
if (!devname) {
WPRINTF(("virtio_net: devname NULL\n"));
if (!devopts) {
WPRINTF(("virtio_net: invalid optional argument\n"));
free(net);
return -1;
}
if ((strstr(devname, "tap") != NULL) ||
(strncmp(devname, "vmnet", 5) == 0))
virtio_net_tap_setup(net, devname);
vtopts = tmp = strdup(opts);
if ((strstr(tmp, "tap") != NULL)
|| (strncmp(tmp, "vmnet",5) == 0)) {
type = strsep(&tmp, "=");
name = strsep(&tmp, ",");
}
free(devname);
if ((type != NULL) && (name != NULL)) {
snprintf(fname, IFNAMSIZ, "%s_%s", type, name);
if ((strstr(type, "tap") != NULL) ||
(strncmp(type, "vmnet", 5) == 0)){
virtio_net_tap_setup(net, fname);
}
}
/*
* The default MAC address is the standard NetApp OUI of 00-a0-98,
@ -928,6 +942,9 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
net->config.mac[5] = digest[2];
}
free(vtopts);
free(devopts);
/* initialize config space */
pci_set_cfgdata16(dev, PCIR_DEVICE, VIRTIO_DEV_NET);
pci_set_cfgdata16(dev, PCIR_VENDOR, VIRTIO_VENDOR);