issue with bridge and VLAN combination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hiya,

I'm having an issue with a combination of VLAN and bridges that
pretty much looks like a kernel bug, though I have to admit I'm
not sure I do everything proper. Would anyone here be able to
help?

Basically, I'm trying to replicate a physical network setup onto
virtual networks with qemu/libvirt

On the physical network, I've got a smart switch with 2 VLANs
(ID 2 and 3), port 1 of the switch is configured with tagged
vlans and connects to one host (A running FreeBSD 8.1). port 2
is member of VLAN 3 untagged and connects to a debian host B.

Now, I'm doing the same with virtual machines.

So here is the setup I have:

$ ip link show
[...]
3: virbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether fe:54:00:f4:e4:e6 brd ff:ff:ff:ff:ff:ff
4: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether fe:54:00:2c:37:cd brd ff:ff:ff:ff:ff:ff
6: virbr1.3@virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether a2:99:41:ba:e6:ae brd ff:ff:ff:ff:ff:ff
7: virbr1.2@virbr1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
    link/ether a2:99:41:ba:e6:ae brd ff:ff:ff:ff:ff:ff
8: virbr1_3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether a2:99:41:ba:e6:ae brd ff:ff:ff:ff:ff:ff
9: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:ce:01:08 brd ff:ff:ff:ff:ff:ff
10: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:2c:37:cd brd ff:ff:ff:ff:ff:ff
11: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:f4:e4:e6 brd ff:ff:ff:ff:ff:ff
$ brctl show
bridge name     bridge id               STP enabled     interfaces
virbr1          8000.fe54002c37cd       no              vnet1
virbr1_3                8000.a29941bae6ae       no              virbr1.3
                                                        vnet0
virbr2          8000.fe5400f4e4e6       yes             vnet2

(actually, you may ignore everything related to virbr2 as it's not related to the issue).

host A has NICs mapped to vnet2 and vnet1 (that one with tagged vlans configured).

host B has a NIC mapped to vnet0.

IP communication is fine except between A and the host, between B and the host
but not between A and B.

If I try to have B talk to A (to its interface on virbr1 tagged
with PVID 3), the ARP traffic is OK, but then anything else is
garbbled when it goes out to the vnet1 interface.

If I tshark on vnet0 or virbr1_3, I can see the TCP SYN OK without the VLAN
802.1Q header as expected. If I tshark on virbr1, I can see a
correct 802.1Q header as expected.

But if I tshark on vnet1, the ethernet headers are garbbled. the
ethernet type is IP instead of 802.1Q, but I can see 8 extra
bytes between the ethernet header and IP header the first four
being 00 00 00 00, and the next ones being the 802.1Q header.

Here is a tshark dissect of that packet:

Frame 1 (106 bytes on wire, 106 bytes captured)
Ethernet II, Src: RealtekU_ce:01:08 (52:54:00:ce:01:08), Dst: RealtekU_2c:37:cd (52:54:00:2c:37:cd)
    Destination: RealtekU_2c:37:cd (52:54:00:2c:37:cd)
        Address: RealtekU_2c:37:cd (52:54:00:2c:37:cd)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
    Source: RealtekU_ce:01:08 (52:54:00:ce:01:08)
        Address: RealtekU_ce:01:08 (52:54:00:ce:01:08)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
    Type: IP (0x0800)
Internet Protocol
    Version: 0
    Header length: 0 bytes (bogus, must be at least 20)

0000  52 54 00 2c 37 cd 52 54 00 ce 01 08 08 00 00 00   RT.,7.RT........
                                                ~~~~~
0010  00 00 00 03 08 00 45 00 00 54 00 00 40 00 40 01   ......E..T..@.@.
      ~~~~~~~~~~~~~~~~~
0020  12 8c 0a 0b 0a 07 0a 0b 0a 01 08 00 36 8f 04 d1   ............6...
0030  00 01 f4 e3 98 4c 00 00 00 00 6a 9b 06 00 00 00   .....L....j.....
0040  00 00 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d   ................
0050  1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d   .. !"#$%&'()*+,-
0060  2e 2f 30 31 32 33 34 35 36 37                     ./01234567


Is there anything I'm doing wrong here? Or another way to
achieve what I'm trying to do?

packets from A to B are fine.

Initially found on 2.6.32 on debian sid amd64, but the same
occurs with 2.6.35 from experimental.

Thanks,
Stephane


--
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux