| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- ALL_TESTS="
- test_set_remote
- test_change_mc_remote
- "
- source lib.sh
- check_remotes()
- {
- local what=$1; shift
- local N=$(bridge fdb sh dev vx | grep 00:00:00:00:00:00 | wc -l)
- ((N == 2))
- check_err $? "expected 2 remotes after $what, got $N"
- }
- # Check FDB default-remote handling across "ip link set".
- test_set_remote()
- {
- RET=0
- adf_ip_link_add vx up type vxlan id 2000 dstport 4789
- bridge fdb ap dev vx 00:00:00:00:00:00 dst 192.0.2.20 self permanent
- bridge fdb ap dev vx 00:00:00:00:00:00 dst 192.0.2.30 self permanent
- check_remotes "fdb append"
- ip link set dev vx type vxlan remote 192.0.2.30
- check_remotes "link set"
- log_test 'FDB default-remote handling across "ip link set"'
- }
- fmt_remote()
- {
- local addr=$1; shift
- if [[ $addr == 224.* ]]; then
- echo "group $addr"
- else
- echo "remote $addr"
- fi
- }
- change_remote()
- {
- local remote=$1; shift
- ip link set dev vx type vxlan $(fmt_remote $remote) dev v1
- }
- check_membership()
- {
- local check_vec=("$@")
- local memberships
- memberships=$(
- netstat -n --groups |
- sed -n '/^v1\b/p' |
- grep -o '[^ ]*$'
- )
- check_err $? "Couldn't obtain group memberships"
- local item
- for item in "${check_vec[@]}"; do
- eval "local $item"
- echo "$memberships" | grep -q "\b$group\b"
- check_err_fail $fail $? "$group is_ex reported in IGMP query response"
- done
- }
- test_change_mc_remote()
- {
- check_command netstat || return
- adf_ip_link_add v1 up type veth peer name v2
- adf_ip_link_set_up v2
- RET=0
- adf_ip_link_add vx up type vxlan dstport 4789 \
- local 192.0.2.1 $(fmt_remote 224.1.1.1) dev v1 vni 1000
- check_membership "group=224.1.1.1 fail=0" \
- "group=224.1.1.2 fail=1" \
- "group=224.1.1.3 fail=1"
- log_test "MC group report after VXLAN creation"
- RET=0
- change_remote 224.1.1.2
- check_membership "group=224.1.1.1 fail=1" \
- "group=224.1.1.2 fail=0" \
- "group=224.1.1.3 fail=1"
- log_test "MC group report after changing VXLAN remote MC->MC"
- RET=0
- change_remote 192.0.2.2
- check_membership "group=224.1.1.1 fail=1" \
- "group=224.1.1.2 fail=1" \
- "group=224.1.1.3 fail=1"
- log_test "MC group report after changing VXLAN remote MC->UC"
- }
- trap defer_scopes_cleanup EXIT
- tests_run
- exit $EXIT_STATUS
|