[Lguest] [PATCH] lguest: don't set MAC address for guest to same as TUN if bridging

Rusty Russell rusty at rustcorp.com.au
Tue Aug 5 15:02:23 EST 2008


On Tuesday 05 August 2008 02:43:18 Max Krasnyansky wrote:
> Rusty Russell wrote:
> > 	tap0: received packet with  own address as source address
> >
> > I don't use bridging so hadn't noticed.
> >
> > Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>
>
> Why would you ever want the same macaddr ?
> I'd say even without bridging guest side should have a different one.

I wondered if you'd ask that if I cc'd you :)  I don't think there's a good
reason either.
===
lguest: don't set MAC address for guest unless specified

This shows up when trying to bridge:
	tap0: received packet with  own address as source address

As Max Krasnyansky points out, there's no reason to give the guest the
same mac address as the TUN device.

Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>
Cc: Max Krasnyansky <maxk at qualcomm.com>
---
 Documentation/lguest/lguest.c |   23 +----------------------
 1 file changed, 1 insertion(+), 22 deletions(-)

diff -r f4eb98c80be8 Documentation/lguest/lguest.c
--- a/Documentation/lguest/lguest.c	Mon Aug 04 13:47:20 2008 +1000
+++ b/Documentation/lguest/lguest.c	Tue Aug 05 14:20:24 2008 +1000
@@ -1447,21 +1447,6 @@ static void configure_device(int fd, con
 		err(1, "Bringing interface %s up", tapif);
 }
 
-static void get_mac(int fd, const char *tapif, unsigned char hwaddr[6])
-{
-	struct ifreq ifr;
-
-	memset(&ifr, 0, sizeof(ifr));
-	strcpy(ifr.ifr_name, tapif);
-
-	/* SIOC stands for Socket I/O Control.  G means Get (vs S for Set
-	 * above).  IF means Interface, and HWADDR is hardware address.
-	 * Simple! */
-	if (ioctl(fd, SIOCGIFHWADDR, &ifr) != 0)
-		err(1, "getting hw address for %s", tapif);
-	memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, 6);
-}
-
 static int get_tun_device(char tapif[IFNAMSIZ])
 {
 	struct ifreq ifr;
@@ -1531,11 +1516,8 @@ static void setup_tun_net(char *arg)
 	p = strchr(arg, ':');
 	if (p) {
 		str2mac(p+1, conf.mac);
+		add_feature(dev, VIRTIO_NET_F_MAC);
 		*p = '\0';
-	} else {
-		p = arg + strlen(arg);
-		/* None supplied; query the randomly assigned mac. */
-		get_mac(ipfd, tapif, conf.mac);
 	}
 
 	/* arg is now either an IP address or a bridge name */
@@ -1547,13 +1529,10 @@ static void setup_tun_net(char *arg)
 	/* Set up the tun device. */
 	configure_device(ipfd, tapif, ip);
 
-	/* Tell Guest what MAC address to use. */
-	add_feature(dev, VIRTIO_NET_F_MAC);
 	add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY);
 	/* Expect Guest to handle everything except UFO */
 	add_feature(dev, VIRTIO_NET_F_CSUM);
 	add_feature(dev, VIRTIO_NET_F_GUEST_CSUM);
-	add_feature(dev, VIRTIO_NET_F_MAC);
 	add_feature(dev, VIRTIO_NET_F_GUEST_TSO4);
 	add_feature(dev, VIRTIO_NET_F_GUEST_TSO6);
 	add_feature(dev, VIRTIO_NET_F_GUEST_ECN);



More information about the Lguest mailing list