+Wed Feb 27 20:21:35 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+ * src/bridge.c, src/bridge.h, src/qemu_conf.c: Set mac address
+ on TUN device to work with Xenner
+
Wed Feb 27 20:12:35 CET 2008 Jim Meyering <meyering@redhat.com>
Make qemud/'s rpcgen rules work.
#include <linux/sockios.h> /* SIOCBRADDBR etc. */
#include <linux/if_bridge.h> /* SYSFS_BRIDGE_ATTR */
#include <linux/if_tun.h> /* IFF_TUN, IFF_NO_PI */
+#include <net/if_arp.h> /* ARPHRD_ETHER */
#include "internal.h"
int
brAddTap(brControl *ctl,
const char *bridge,
+ unsigned char *macaddr,
char *ifname,
int maxlen,
int *tapfd)
}
if (ioctl(fd, TUNSETIFF, &try) == 0) {
+ struct ifreq addr;
+ memset(&addr, 0, sizeof(addr));
+ memcpy(addr.ifr_hwaddr.sa_data, macaddr, 6);
+ addr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
+
+ /* Device actually starts in 'UP' state, but it
+ * needs to be down to set the MAC addr
+ */
+ if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 0)))
+ goto error;
+ if (ioctl(fd, SIOCSIFHWADDR, &addr) != 0)
+ goto error;
if ((errno = brAddInterface(ctl, bridge, try.ifr_name)))
goto error;
if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 1)))
}
if ((err = brAddTap(driver->brctl, brname,
+ net->mac,
ifname, BR_IFNAME_MAXLEN, &tapfd))) {
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"Failed to add tap interface '%s' to bridge '%s' : %s",