[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] [patch 4/5] xen: netback mac selection
Out of interest, why do you care about the backend's address? It doesn't appear on any packets. Does this patch also pass new parameters into the vif-bridge script? Thanks, Ian > Allow specification of backend vif MAC addresses. If a backend > MAC is not provided, generate one as before > > Signed-off-by: Jody Belka <knew-xen@xxxxxxxx> > > > diffstat: > linux-2.6.10-xen-sparse/drivers/xen/netback/common.h | 2 + > linux-2.6.10-xen-sparse/drivers/xen/netback/interface.c | > 25 +++++++++++----- > tools/python/xen/lowlevel/xu/xu.c | 6 +++ > tools/python/xen/xend/server/messages.py | 4 +- > tools/python/xen/xend/server/netif.py | > 22 +++++++++++++- > tools/python/xen/xm/create.py | 10 +++++- > xen/include/public/io/domain_controller.h | 6 ++- > 7 files changed, 61 insertions(+), 14 deletions(-) > > > diff -drNU2 > xen.orig/linux-2.6.10-xen-sparse/drivers/xen/netback/common.h > xen/linux-2.6.10-xen-sparse/drivers/xen/netback/common.h > --- > xen.orig/linux-2.6.10-xen-sparse/drivers/xen/netback/common.h > 2005-01-30 00:46:28.000000000 +0100 > +++ xen/linux-2.6.10-xen-sparse/drivers/xen/netback/common.h > 2005-01-31 18:40:52.936589384 +0100 > @@ -36,4 +36,6 @@ > unsigned int handle; > > + u8 fe_dev_addr[6]; > + > /* Physical parameters of the comms window. */ > unsigned long tx_shmem_frame; > diff -drNU2 > xen.orig/linux-2.6.10-xen-sparse/drivers/xen/netback/interface > .c xen/linux-2.6.10-xen-sparse/drivers/xen/netback/interface.c > --- > xen.orig/linux-2.6.10-xen-sparse/drivers/xen/netback/inte > rface.c 2005-01-30 00:46:28.000000000 +0100 > +++ > xen/linux-2.6.10-xen-sparse/drivers/xen/netback/interface.c > 2005-01-31 18:40:52.947587712 +0100 > @@ -164,11 +164,22 @@ > dev->tx_queue_len = 0; > > - /* > - * Initialise a dummy MAC address. We choose the > numerically largest > - * non-broadcast address to prevent the address getting > stolen by an > - * Ethernet bridge for STP purposes. (FE:FF:FF:FF:FF:FF) > - */ > - memset(dev->dev_addr, 0xFF, ETH_ALEN); > - dev->dev_addr[0] &= ~0x01; > + if ( (create->be_mac[0] == 0) && (create->be_mac[1] == 0) && > + (create->be_mac[2] == 0) && (create->be_mac[3] == 0) && > + (create->be_mac[4] == 0) && (create->be_mac[5] == 0) ) > + { > + /* > + * Initialise a dummy MAC address. We choose the > numerically largest > + * non-broadcast address to prevent the address > getting stolen by an > + * Ethernet bridge for STP purposes. (FE:FF:FF:FF:FF:FF) > + */ > + memset(dev->dev_addr, 0xFF, ETH_ALEN); > + dev->dev_addr[0] &= ~0x01; > + } > + else > + { > + memcpy(dev->dev_addr, create->be_mac, ETH_ALEN); > + } > + > + memcpy(netif->fe_dev_addr, create->mac, ETH_ALEN); > > rtnl_lock(); > diff -drNU2 xen.orig/tools/python/xen/lowlevel/xu/xu.c > xen/tools/python/xen/lowlevel/xu/xu.c > --- xen.orig/tools/python/xen/lowlevel/xu/xu.c > 2005-01-30 00:46:29.000000000 +0100 > +++ xen/tools/python/xen/lowlevel/xu/xu.c 2005-01-31 > 18:40:52.957586192 +0100 > @@ -624,4 +624,10 @@ > P2C(netif_be_create_t, mac[4], u8); > P2C(netif_be_create_t, mac[5], u8); > + P2C(netif_be_create_t, be_mac[0], u8); > + P2C(netif_be_create_t, be_mac[1], u8); > + P2C(netif_be_create_t, be_mac[2], u8); > + P2C(netif_be_create_t, be_mac[3], u8); > + P2C(netif_be_create_t, be_mac[4], u8); > + P2C(netif_be_create_t, be_mac[5], u8); > break; > case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DESTROY): > diff -drNU2 xen.orig/tools/python/xen/xend/server/messages.py > xen/tools/python/xen/xend/server/messages.py > --- xen.orig/tools/python/xen/xend/server/messages.py > 2005-01-30 00:46:29.000000000 +0100 > +++ xen/tools/python/xen/xend/server/messages.py > 2005-01-31 18:40:52.969584368 +0100 > @@ -267,7 +267,7 @@ > args = {} > for (k, v) in params.items(): > - if k == 'mac': > + if k in ['mac', 'be_mac']: > for i in range(0, 6): > - args['mac[%d]' % i] = v[i] > + args['%s[%d]' % (k, i)] = v[i] > else: > args[k] = v > diff -drNU2 xen.orig/tools/python/xen/xend/server/netif.py > xen/tools/python/xen/xend/server/netif.py > --- xen.orig/tools/python/xen/xend/server/netif.py > 2005-01-30 00:46:29.000000000 +0100 > +++ xen/tools/python/xen/xend/server/netif.py 2005-01-31 > 18:40:52.980582696 +0100 > @@ -110,5 +110,12 @@ > if not vmac: return None > mac = [ int(x, 16) for x in vmac.split(':') ] > - if len(mac) != 6: raise XendError("invalid mac") > + if len(mac) != 6: raise XendError("invalid mac: %s" % vmac) > + return mac > + > + def _get_config_be_mac(self, config): > + vmac = sxp.child_value(config, 'be_mac') > + if not vmac: return None > + mac = [ int(x, 16) for x in vmac.split(':') ] > + if len(mac) != 6: raise XendError("invalid backend > mac: %s" % vmac) > return mac > > @@ -128,4 +135,5 @@ > self.config = config > self.mac = None > + self.be_mac = None > self.bridge = None > self.script = None > @@ -136,4 +144,5 @@ > raise XendError("invalid mac") > self.mac = mac > + self.be_mac = self._get_config_be_mac(config) > self.bridge = sxp.child_value(config, 'bridge') > self.script = sxp.child_value(config, 'script') > @@ -160,4 +169,5 @@ > changes = {} > mac = self._get_config_mac(config) > + be_mac = self._get_config_be_mac(config) > bridge = sxp.child_value(config, 'bridge') > script = sxp.child_value(config, 'script') > @@ -167,4 +177,6 @@ > if (mac is not None) and (mac != self.mac): > raise XendError("cannot change mac") > + if (be_mac is not None) and (be_mac != self.be_mac): > + raise XendError("cannot change backend mac") > if (backendDomain is not None) and (backendDomain != > str(self.backendDomain)): > raise XendError("cannot change backend") > @@ -191,4 +203,6 @@ > ['vif', vif], > ['mac', mac]] > + if self.be_mac: > + val.append(['be_mac', self.get_be_mac()]) > if self.bridge: > val.append(['bridge', self.bridge]) > @@ -215,4 +229,9 @@ > return ':'.join(map(lambda x: "%02x" % x, self.mac)) > > + def get_be_mac(self): > + """Get the backend MAC address as a string. > + """ > + return ':'.join(map(lambda x: "%02x" % x, self.be_mac)) > + > def vifctl_params(self, vmname=None): > """Get the parameters to pass to vifctl. > @@ -268,4 +287,5 @@ > { 'domid' : self.controller.dom, > 'netif_handle' : self.vif, > + 'be_mac' : self.be_mac or [0, > 0, 0, 0, 0, 0], > 'mac' : self.mac }) > self.getBackendInterface().writeRequest(msg, response=d) > diff -drNU2 xen.orig/tools/python/xen/xm/create.py > xen/tools/python/xen/xm/create.py > --- xen.orig/tools/python/xen/xm/create.py 2005-01-30 > 00:46:29.000000000 +0100 > +++ xen/tools/python/xen/xm/create.py 2005-01-31 > 18:40:52.990581176 +0100 > @@ -152,9 +152,11 @@ > use="Add an IP address to the domain.") > > -gopts.var('vif', > val="mac=MAC,bridge=BRIDGE,script=SCRIPT,backend=DOM", > +gopts.var('vif', > val="mac=MAC,be_mac=MAC,bridge=BRIDGE,script=SCRIPT,backend=DOM", > fn=append_value, default=[], > use="""Add a network interface with the given MAC > address and bridge. > The vif is configured by calling the given > configuration script. > If mac is not specified a random MAC address is used. > + The MAC address of the backend interface can be > selected with be_mac. > + If not specified then the network backend chooses > it's own MAC address. > If bridge is not specified the default bridge is used. > If script is not specified the default script is used. > @@ -286,4 +288,5 @@ > if not mac: > mac = randomMAC() > + be_mac = d.get('be_mac') > bridge = d.get('bridge') > script = d.get('script') > @@ -292,4 +295,5 @@ > else: > mac = randomMAC() > + be_mac = None > bridge = None > script = None > @@ -298,4 +302,6 @@ > config_vif = ['vif'] > config_vif.append(['mac', mac]) > + if be_mac: > + config_vif.append(['be_mac', be_mac]) > if bridge: > config_vif.append(['bridge', bridge]) > @@ -384,5 +390,5 @@ > k = k.strip() > v = v.strip() > - if k not in ['mac', 'bridge', 'script', 'backend', 'ip']: > + if k not in ['mac', 'be_mac', 'bridge', > 'script', 'backend', 'ip']: > opts.err('Invalid vif specifier: ' + vif) > d[k] = v > diff -drNU2 > xen.orig/xen/include/public/io/domain_controller.h > xen/xen/include/public/io/domain_controller.h > --- xen.orig/xen/include/public/io/domain_controller.h > 2005-01-30 00:46:29.000000000 +0100 > +++ xen/xen/include/public/io/domain_controller.h > 2005-01-31 18:40:53.000579656 +0100 > @@ -479,7 +479,9 @@ > u8 mac[6]; /* 8 */ > u16 __pad1; /* 14 */ > + u8 be_mac[6]; /* 16 */ > + u16 __pad2; /* 22 */ > /* OUT */ > - u32 status; /* 16 */ > -} PACKED netif_be_create_t; /* 20 bytes */ > + u32 status; /* 24 */ > +} PACKED netif_be_create_t; /* 28 bytes */ > > /* > > > ------------------------------------------------------- > This SF.Net email is sponsored by: IntelliVIEW -- Interactive > Reporting > Tool for open source databases. Create drag-&-drop reports. Save time > by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. > Download a FREE copy at http://www.intelliview.com/go/osdn_nl > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.sourceforge.net/lists/listinfo/xen-devel > ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |