[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 3/4] Allow vif= to specify PCI address for each nic



This allows more then 32 nics.

This can help with Windows finding nics at boot time.

This allows changing config file:

    builder = "hvm"
    device_model_args_hvm = [
     "-device",
     
"pci-bridge,chassis_nr=2,msi=on,id=pciBridge5.0,multifunction=on,addr=0x15.0",
     "-device",
     
"vmxnet3,id=nic3,netdev=net3,mac=00:0c:29:86:44:be,bus=pciBridge5.0,addr=0x4.0x0",
     "-netdev",
     "type=tap,id=net3,ifname=vif.3-emu,script=/etc/qemu-ifup,downscript=no",
    ]
    vif = [
    ]

to:

    builder = "hvm"
    device_model_args_hvm = [
     "-device",
     
"pci-bridge,chassis_nr=2,msi=on,id=pciBridge5.0,multifunction=on,addr=0x15.0",
    ]
    vif = [
     
"model=vmxnet3,bridge=xenbr0,mac=00:0c:29:86:44:a0,bus=pciBridge5.0,addr=0x4.0x0",
    ]

which enables usage of xen-netback.

Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
CC: Don Slutz <dslutz@xxxxxxxxxxx>
---
 docs/misc/xl-network-configuration.markdown | 14 ++++++++++++++
 tools/libxl/libxl_dm.c                      | 23 ++++++++++++++++++++---
 tools/libxl/libxl_types.idl                 |  2 ++
 tools/libxl/xl_cmdimpl.c                    |  4 ++++
 4 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/docs/misc/xl-network-configuration.markdown 
b/docs/misc/xl-network-configuration.markdown
index 3c439d4..6a7f6db 100644
--- a/docs/misc/xl-network-configuration.markdown
+++ b/docs/misc/xl-network-configuration.markdown
@@ -60,6 +60,20 @@ strategy. Otherwise in general you should prefer to generate 
a random
 MAC and set the locally administered bit since this allows for more
 bits of randomness than using the Xen OUI.
 
+### bus
+
+Specifies the name of the network bridge which this VIF should be
+added to. The default is `xenbr0`. The bridge must be configured using
+your distribution's network configuration tools. See the [wiki][net]
+for guidance and examples.
+
+### addr
+
+Specifies the name of the network bridge which this VIF should be
+added to. The default is `xenbr0`. The bridge must be configured using
+your distribution's network configuration tools. See the [wiki][net]
+for guidance and examples.
+
 ### bridge
 
 Specifies the name of the network bridge which this VIF should be
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 8a8f972..2bf4dab 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -315,6 +315,16 @@ static int libxl__build_device_model_args_old(libxl__gc 
*gc,
                 const char *ifname = libxl__device_nic_devname(gc,
                                                 domid, nics[i].devid,
                                                 LIBXL_NIC_TYPE_VIF_IOEMU);
+                if (nics[i].bus && nics[i].bus[0]) {
+                    LOG(ERROR,
+                        "bus= not supported by 
device_model_version=qemu-xen-traditional");
+                    return ERROR_INVAL;
+                }
+                if (nics[i].addr && nics[i].addr[0]) {
+                    LOG(ERROR,
+                        "addr= not supported by 
device_model_version=qemu-xen-traditional");
+                    return ERROR_INVAL;
+                }
                 flexarray_vappend(dm_args,
                                   "-net",
                                   GCSPRINTF(
@@ -747,11 +757,18 @@ static int libxl__build_device_model_args_new(libxl__gc 
*gc,
                 const char *ifname = libxl__device_nic_devname(gc,
                                                 guest_domid, nics[i].devid,
                                                 LIBXL_NIC_TYPE_VIF_IOEMU);
+                char * busp = "";
+                char * addrp = "";
+
+                if (nics[i].bus && nics[i].bus[0])
+                    busp = libxl__sprintf(gc, ",bus=%s", nics[i].bus);
+                if (nics[i].addr && nics[i].addr[0])
+                    addrp = libxl__sprintf(gc, ",addr=%s", nics[i].addr);
                 flexarray_append(dm_args, "-device");
-                flexarray_append(dm_args,
-                   libxl__sprintf(gc, "%s,id=nic%d,netdev=net%d,mac=%s",
+                flexarray_append(dm_args, GCSPRINTF(
+                                     "%s,id=nic%d,netdev=net%d,mac=%s%s%s",
                                                 nics[i].model, nics[i].devid,
-                                                nics[i].devid, smac));
+                                          nics[i].devid, smac, busp, addrp));
                 flexarray_append(dm_args, "-netdev");
                 flexarray_append(dm_args, GCSPRINTF(
                                           "type=tap,id=net%d,ifname=%s,"
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index c7af74b..6d3b058 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -521,6 +521,8 @@ libxl_device_nic = Struct("device_nic", [
     ("mtu", integer),
     ("model", string),
     ("mac", libxl_mac),
+    ("bus", string),
+    ("addr", string),
     ("ip", string),
     ("bridge", string),
     ("ifname", string),
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index b3fe0cd..c48d52a 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -961,6 +961,10 @@ static int parse_nic_config(libxl_device_nic *nic, 
XLU_Config **config, char *to
             nic->mac[i] = val;
             oparg = endptr + 1;
         }
+    } else if (MATCH_OPTION("bus", token, oparg)) {
+        replace_string(&nic->bus, oparg);
+    } else if (MATCH_OPTION("addr", token, oparg)) {
+        replace_string(&nic->addr, oparg);
     } else if (MATCH_OPTION("bridge", token, oparg)) {
         replace_string(&nic->bridge, oparg);
     } else if (MATCH_OPTION("netdev", token, oparg)) {
-- 
1.8.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.