While attending the Virtualization Track at LinuxTag I've noticed setting up bridged networking troubles alot of people, so here is how I'm doing it.  The problem with bridge setup is that it works best without any surprising side effects when it is done using the network startup scripts of your linux distribution.  And unfortunaly each distribution goes its own ways here.  So this applies to RHEL and Fedora only.

First make sure you are using the classic network setup scripts instead of the network manager:

# chkconfig NetworkManager off
# chkconfig network on

Then go to /etc/sysconfig/network-scripts, there are ifcfg-* files, one for each interface. Create a ifcfg-br0 file there:

DEVICE=br0
ONBOOT=yes
USERCTL=no
TYPE=Bridge
DELAY=0
STP=yes

BOOTPROTO=dhcp
IPV6INIT=yes
IPV6_AUTOCONF=yes

This will make the network scripts create a bridge named br0. The bridge settings are marked bold. The other settings are the usual stuff you can put in there, the example uses autoconfig for IPv6 and DHCP for IPv4.

Then edit the file for your physical network interface (probably ifcfg-eth0) to make the network scripts hook eth0 up in br0, so your bridge is connected to the real network:

DEVICE=eth0
HWADDR=your-mac-address-here
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BRIDGE=br0


Finally restart the network using

service network restart

and you should be set. Libvirt should detect the new br0 bridge just fine and offer to use it to hook up your virtual machines to the network.