summaryrefslogtreecommitdiff
path: root/tests/mcast-snooping.at
blob: c03aba3fb41a7ac6db563e0500d2b1c81b6c4fdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
AT_BANNER([mcast snooping])

AT_SETUP([mcast - check multicasts to trunk ports are not duplicated])

OVS_VSWITCHD_START([])

AT_CHECK([
    ovs-vsctl set bridge br0 \
    datapath_type=dummy \
    mcast_snooping_enable=true \
    other-config:mcast-snooping-disable-flood-unregistered=true
], [0])

AT_CHECK([ovs-ofctl add-flow br0 action=normal])

# Create an access port p1 on vlan 1725, and a trunk port p2.
AT_CHECK([
    ovs-vsctl add-port br0 p1 tag=1725 -- set Interface p1 type=dummy \
    other-config:hwaddr=aa:55:aa:55:00:01 ofport_request=1 \
    -- add-port br0 p2 -- set Interface p2 type=dummy \
    other-config:hwaddr=aa:55:aa:55:00:02 ofport_request=2
], [0])

AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dummy@ovs-dummy: hit:0 missed:0
	br0:
		br0 65534/100: (dummy-internal)
		p1 1/1: (dummy)
		p2 2/2: (dummy)
])

# Send IGMPv3 query on p2 with vlan 1725
# 5c:8a:38:55:25:52 > 01:00:5e:00:00:01, ethertype 802.1Q (0x8100), length 64: vlan 1725, p 0, ethertype IPv4,
# 172.17.25.1 > 224.0.0.1: igmp query v3
AT_CHECK([ovs-appctl netdev-dummy/receive p2 \
'01005e0000015c8a38552552810006bd080046c000240000000001027f00ac111901e0000001940400001164ec1e00000000027d000000000000000000000000'])

# Send IGMPv3 query on p2 with vlan 1728
# 5c:8a:38:55:25:52 > 01:00:5e:00:00:01, ethertype 802.1Q (0x8100), length 64: vlan 1728, p 0, ethertype IPv4,
# 172.17.28.1 > 224.0.0.1: igmp query v3
AT_CHECK([ovs-appctl netdev-dummy/receive p2 \
'01005e0000015c8a38552552810006c0080046c000240000000001027c00ac111c01e0000001940400001164ec1e00000000027d000000000000000000000000'])

AT_CHECK([ovs-appctl mdb/show br0], [0], [dnl
 port  VLAN  GROUP                Age
    2  1725  querier               0
    2  1728  querier               0
])

AT_CHECK([ovs-vsctl set Interface p2 options:tx_pcap=p2.pcap])

# Send a multicast packet on p1
AT_CHECK([
    ovs-appctl netdev-dummy/receive p1 \
    'in_port(1),eth(src=aa:55:aa:55:00:01,dst=01:00:5e:5e:01:01),eth_type(0x0800),ipv4(src=10.0.0.1,dst=239.94.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=0,dst=8000)'
])

# Check this packet was forwarded exactly once to p2 and has vlan tag 1725
# aa:55:aa:55:00:01 > 01:00:5e:5e:01:01, ethertype 802.1Q (0x8100), length 46: vlan 1725, p 0, ethertype IPv4,
# 10.0.0.1.0 > 239.94.1.1.8000: UDP, length 0
AT_CHECK([ovs-pcap p2.pcap > p2.pcap.txt 2>&1])
AT_CHECK([cat p2.pcap.txt], [0], [dnl
01005e5e0101aa55aa550001810006bd08004500001c00000000401180710a000001ef5e010100001f400008e63d
])

# Clear the mdb, send a IGMP packet with invalid checksum and make sure it
# does not end up in the mdb.
AT_CHECK([ovs-appctl mdb/flush br0], [0], [dnl
table successfully flushed
])

AT_CHECK([ovs-appctl netdev-dummy/receive p2 \
'01005e0000015c8a38552552810006bd080046c000240000000001027f00ac111901e0000001940400001164ec1000000000027d000000000000000000000000'])

AT_CHECK([ovs-appctl mdb/show br0], [0], [dnl
 port  VLAN  GROUP                Age
])


# First send a valid packet to make sure it populates the mdb. Than Clear
# the mdb, send a MLD packet with invalid checksum and make sure it does
# not end up in the mdb.

AT_CHECK([ovs-appctl netdev-dummy/receive p2 \
'3333ff0e4c67000c290e4c6786dd600000000020000100000000000000000000000000000000ff0200000000000000000001ff0e4c673a000502000001008300e7b800000000ff0200000000000000000001ff0e4c67'])

AT_CHECK([ovs-appctl mdb/show br0], [0], [dnl
 port  VLAN  GROUP                Age
    2     0  ff02::1:ff0e:4c67           0
])

AT_CHECK([ovs-appctl mdb/flush br0], [0], [dnl
table successfully flushed
])

AT_CHECK([ovs-appctl netdev-dummy/receive p2 \
'3333ff0e4c67000c290e4c6786dd600000000020000100000000000000000000000000000000ff0200000000000000000001ff0e4c673a000502000001008300e7b000000000ff0200000000000000000001ff0e4c67'])

AT_CHECK([ovs-appctl mdb/show br0], [0], [dnl
 port  VLAN  GROUP                Age
])

OVS_VSWITCHD_STOP
AT_CLEANUP