Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4ALL_TESTS="
5 test_set_remote
6 test_change_mc_remote
7"
8source lib.sh
9
10check_remotes()
11{
12 local what=$1; shift
13 local N=$(bridge fdb sh dev vx | grep 00:00:00:00:00:00 | wc -l)
14
15 ((N == 2))
16 check_err $? "expected 2 remotes after $what, got $N"
17}
18
19# Check FDB default-remote handling across "ip link set".
20test_set_remote()
21{
22 RET=0
23
24 ip_link_add vx up type vxlan id 2000 dstport 4789
25 bridge fdb ap dev vx 00:00:00:00:00:00 dst 192.0.2.20 self permanent
26 bridge fdb ap dev vx 00:00:00:00:00:00 dst 192.0.2.30 self permanent
27 check_remotes "fdb append"
28
29 ip link set dev vx type vxlan remote 192.0.2.30
30 check_remotes "link set"
31
32 log_test 'FDB default-remote handling across "ip link set"'
33}
34
35fmt_remote()
36{
37 local addr=$1; shift
38
39 if [[ $addr == 224.* ]]; then
40 echo "group $addr"
41 else
42 echo "remote $addr"
43 fi
44}
45
46change_remote()
47{
48 local remote=$1; shift
49
50 ip link set dev vx type vxlan $(fmt_remote $remote) dev v1
51}
52
53check_membership()
54{
55 local check_vec=("$@")
56
57 local memberships
58 memberships=$(
59 netstat -n --groups |
60 sed -n '/^v1\b/p' |
61 grep -o '[^ ]*$'
62 )
63 check_err $? "Couldn't obtain group memberships"
64
65 local item
66 for item in "${check_vec[@]}"; do
67 eval "local $item"
68 echo "$memberships" | grep -q "\b$group\b"
69 check_err_fail $fail $? "$group is_ex reported in IGMP query response"
70 done
71}
72
73test_change_mc_remote()
74{
75 check_command netstat || return
76
77 ip_link_add v1 up type veth peer name v2
78 ip_link_set_up v2
79
80 RET=0
81
82 ip_link_add vx up type vxlan dstport 4789 \
83 local 192.0.2.1 $(fmt_remote 224.1.1.1) dev v1 vni 1000
84
85 check_membership "group=224.1.1.1 fail=0" \
86 "group=224.1.1.2 fail=1" \
87 "group=224.1.1.3 fail=1"
88
89 log_test "MC group report after VXLAN creation"
90
91 RET=0
92
93 change_remote 224.1.1.2
94 check_membership "group=224.1.1.1 fail=1" \
95 "group=224.1.1.2 fail=0" \
96 "group=224.1.1.3 fail=1"
97
98 log_test "MC group report after changing VXLAN remote MC->MC"
99
100 RET=0
101
102 change_remote 192.0.2.2
103 check_membership "group=224.1.1.1 fail=1" \
104 "group=224.1.1.2 fail=1" \
105 "group=224.1.1.3 fail=1"
106
107 log_test "MC group report after changing VXLAN remote MC->UC"
108}
109
110trap defer_scopes_cleanup EXIT
111
112tests_run
113
114exit $EXIT_STATUS