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

[Xen-devel] Re: Multiple netif device channels



On Wed, Jan 26, 2005 at 08:36:34PM +0000, Mark Williamson wrote:
> > Ok, an update on the matter. The reason no interface appeared in the domU
> > netif backend was because xend wasn't actually configuring the domain as a
> > backend. The reason being that xend was setting the backend configuration
> > flags /after/ constructing the domain image [1], so nothing was happening.
> 
> Ah.  Do you have a patch for this we could apply?

Yep, patch attached. Also includes a change to make specifying the backend
domain more user friendly.


> > With that changed, a vif appears in the netif backend when the other domU
> > is started up. However, no actual network connection can be made between
> > the domains; ping just responds back with a destination host unreachable
> > error.
> 
> Have you tried the hack Andy suggested (giving the backend domain access to a 
> PCI device it has no drivers for) so that the backend domain will be 
> privileged?  If you don't elevate its privilege level some how it will 
> definitely not be able to function as a backend.

Yay. Tried that (pointed the backend domain to the unused onboard audio
controller :) and it worked perfectly.

One thing though; all backend interfaces have the same mac address,
FE:FF:FF:FF:FF:FF. I see that Keir committed this change, along with a note
about problems with bridging with the previous code.

If i modify the code such that i can specify an explicit backend vif mac
address to xend, and then that gets passed into the backend (with
fe:ff:ff:ff:ff:ff being sent if no explicit one is given), what would be the
best way to go about avoiding the problems mentioned when doing so?

In case you're wondering why i need this change, it's because i need some way
to distingush the vif's in the backend domain, so that i can configure them
easily with the linux hotplug system (since, obviously, xend is neither running
in the domain, nor can the dom0 instance configure the interface)


> > Seperately, although still connected to networking, the netfront driver has
> > code in it that prevents it from loading in a backend domain as well as the
> > initial domain. That should probably be reduced down to just checking for
> > the initial domain.
> 
> Yes, this can probably be safely removed now.  Does removing the backend 
> check 
> work for you?

Seems to work fine. Tried it out after i finally got the inter-domU networking
working. No problems appeared with front only, back only or front-and-back
configurations. Patch attached for this as well.


> Thanks for working with us on this.

No probs. Had a good time working through the code to figure out what was going
on.



J

-- 
Jody Belka
knew (at) pimb (dot) org
diff -durN tools.orig/python/xen/xend/XendDomainInfo.py 
tools/python/xen/xend/XendDomainInfo.py
--- tools.orig/python/xen/xend/XendDomainInfo.py        2005-01-27 
01:06:28.840379840 +0100
+++ tools/python/xen/xend/XendDomainInfo.py     2005-01-25 16:20:44.000000000 
+0100
@@ -449,9 +449,9 @@
 
             self.init_domain()
             self.configure_console()
+            self.configure_backends()
             self.construct_image()
             self.configure_restart()
-            self.configure_backends()
             deferred = self.configure()
             def cberr(err):
                 self.destroy()
diff -durN tools.orig/python/xen/xend/server/netif.py 
tools/python/xen/xend/server/netif.py
--- tools.orig/python/xen/xend/server/netif.py  2005-01-25 10:09:39.000000000 
+0100
+++ tools/python/xen/xend/server/netif.py       2005-01-27 01:19:29.043770896 
+0100
@@ -140,7 +140,8 @@
         self.ipaddr = self._get_config_ipaddr(config) or []
         
         try:
-            self.backendDomain = int(sxp.child_value(config, 'backend', '0'))
+            xd = get_component('xen.xend.XendDomain')
+            self.backendDomain = int(xd.domain_lookup(sxp.child_value(config, 
'backend', '0')).id)
         except:
             raise XendError('invalid backend domain')
 
@@ -161,7 +162,8 @@
         bridge = sxp.child_value(config, 'bridge')
         script = sxp.child_value(config, 'script')
         ipaddr = self._get_config_ipaddr(config)
-        backendDomain = sxp.child_value(config, 'backend', '0')
+        xd = get_component('xen.xend.XendDomain')
+        backendDomain = str(xd.domain_lookup(sxp.child_value(config, 
'backend', '0')).id)
         if (mac is not None) and (mac != self.mac):
             raise XendError("cannot change mac")
         if (backendDomain is not None) and (backendDomain != 
str(self.backendDomain)):
diff -durN linux-2.6.10-xen-sparse.orig/drivers/xen/netfront/netfront.c 
linux-2.6.10-xen-sparse/drivers/xen/netfront/netfront.c
--- linux-2.6.10-xen-sparse.orig/drivers/xen/netfront/netfront.c        
2005-01-27 01:02:55.724778336 +0100
+++ linux-2.6.10-xen-sparse/drivers/xen/netfront/netfront.c     2005-01-27 
01:03:07.039058304 +0100
@@ -1295,8 +1295,7 @@
 {
     int err = 0;
 
-    if ( (xen_start_info.flags & SIF_INITDOMAIN) ||
-         (xen_start_info.flags & SIF_NET_BE_DOMAIN) )
+    if ( xen_start_info.flags & SIF_INITDOMAIN )
         return 0;
 
     IPRINTK("Initialising virtual ethernet driver.\n");

 


Rackspace

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