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
|