mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-27 15:56:54 +00:00
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:
parent
cbd593e6c0
commit
d755205c8d
@ -341,6 +341,10 @@ pci_parse_slot(char *opt)
|
|||||||
/* saved fi param in case reboot */
|
/* saved fi param in case reboot */
|
||||||
si->si_funcs[fnum].fi_param_saved = config;
|
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 (b != NULL) {
|
||||||
if ((strcmp("virtio-blk", emul) == 0) && (b != NULL) &&
|
if ((strcmp("virtio-blk", emul) == 0) && (b != NULL) &&
|
||||||
(strchr(b, 'b') != NULL)) {
|
(strchr(b, 'b') != NULL)) {
|
||||||
|
@ -817,7 +817,11 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
char nstr[80];
|
char nstr[80];
|
||||||
char tname[MAXCOMLEN + 1];
|
char tname[MAXCOMLEN + 1];
|
||||||
struct virtio_net *net;
|
struct virtio_net *net;
|
||||||
char *devname = NULL;
|
char fname[IFNAMSIZ];
|
||||||
|
char *devopts = NULL;
|
||||||
|
char *name = NULL;
|
||||||
|
char *type = NULL;
|
||||||
|
char *tmp;
|
||||||
char *vtopts;
|
char *vtopts;
|
||||||
char *opt;
|
char *opt;
|
||||||
int mac_provided;
|
int mac_provided;
|
||||||
@ -852,8 +856,8 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
if (opts != NULL) {
|
if (opts != NULL) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
devname = vtopts = strdup(opts);
|
devopts = vtopts = strdup(opts);
|
||||||
if (!devname) {
|
if (!devopts) {
|
||||||
WPRINTF(("virtio_net: strdup returns NULL\n"));
|
WPRINTF(("virtio_net: strdup returns NULL\n"));
|
||||||
free(net);
|
free(net);
|
||||||
return -1;
|
return -1;
|
||||||
@ -868,7 +872,7 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
err = virtio_net_parsemac(opt,
|
err = virtio_net_parsemac(opt,
|
||||||
net->config.mac);
|
net->config.mac);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
free(devname);
|
free(devopts);
|
||||||
free(net);
|
free(net);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -896,17 +900,27 @@ virtio_net_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
|||||||
*/
|
*/
|
||||||
net->tapfd = -1;
|
net->tapfd = -1;
|
||||||
|
|
||||||
if (!devname) {
|
if (!devopts) {
|
||||||
WPRINTF(("virtio_net: devname NULL\n"));
|
WPRINTF(("virtio_net: invalid optional argument\n"));
|
||||||
free(net);
|
free(net);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((strstr(devname, "tap") != NULL) ||
|
vtopts = tmp = strdup(opts);
|
||||||
(strncmp(devname, "vmnet", 5) == 0))
|
if ((strstr(tmp, "tap") != NULL)
|
||||||
virtio_net_tap_setup(net, devname);
|
|| (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,
|
* 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];
|
net->config.mac[5] = digest[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(vtopts);
|
||||||
|
free(devopts);
|
||||||
|
|
||||||
/* initialize config space */
|
/* initialize config space */
|
||||||
pci_set_cfgdata16(dev, PCIR_DEVICE, VIRTIO_DEV_NET);
|
pci_set_cfgdata16(dev, PCIR_DEVICE, VIRTIO_DEV_NET);
|
||||||
pci_set_cfgdata16(dev, PCIR_VENDOR, VIRTIO_VENDOR);
|
pci_set_cfgdata16(dev, PCIR_VENDOR, VIRTIO_VENDOR);
|
||||||
|
Loading…
Reference in New Issue
Block a user