xref: /openbmc/linux/tools/testing/selftests/drivers/net/bonding/bond-lladdr-target.sh (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*152e8ec7SHangbin Liu#!/bin/bash
2*152e8ec7SHangbin Liu# SPDX-License-Identifier: GPL-2.0
3*152e8ec7SHangbin Liu
4*152e8ec7SHangbin Liu# Regression Test:
5*152e8ec7SHangbin Liu#   Verify bond interface could up when set IPv6 link local address target.
6*152e8ec7SHangbin Liu#
7*152e8ec7SHangbin Liu#  +----------------+
8*152e8ec7SHangbin Liu#  |      br0       |
9*152e8ec7SHangbin Liu#  |       |        |    sw
10*152e8ec7SHangbin Liu#  | veth0   veth1  |
11*152e8ec7SHangbin Liu#  +---+-------+----+
12*152e8ec7SHangbin Liu#      |       |
13*152e8ec7SHangbin Liu#  +---+-------+----+
14*152e8ec7SHangbin Liu#  | veth0   veth1  |
15*152e8ec7SHangbin Liu#  |       |        |    host
16*152e8ec7SHangbin Liu#  |     bond0      |
17*152e8ec7SHangbin Liu#  +----------------+
18*152e8ec7SHangbin Liu#
19*152e8ec7SHangbin Liu# We use veths instead of physical interfaces
20*152e8ec7SHangbin Liusw="sw-$(mktemp -u XXXXXX)"
21*152e8ec7SHangbin Liuhost="ns-$(mktemp -u XXXXXX)"
22*152e8ec7SHangbin Liu
23*152e8ec7SHangbin Liucleanup()
24*152e8ec7SHangbin Liu{
25*152e8ec7SHangbin Liu	ip netns del $sw
26*152e8ec7SHangbin Liu	ip netns del $host
27*152e8ec7SHangbin Liu}
28*152e8ec7SHangbin Liu
29*152e8ec7SHangbin Liutrap cleanup 0 1 2
30*152e8ec7SHangbin Liu
31*152e8ec7SHangbin Liuip netns add $sw
32*152e8ec7SHangbin Liuip netns add $host
33*152e8ec7SHangbin Liu
34*152e8ec7SHangbin Liuip -n $host link add veth0 type veth peer name veth0 netns $sw
35*152e8ec7SHangbin Liuip -n $host link add veth1 type veth peer name veth1 netns $sw
36*152e8ec7SHangbin Liu
37*152e8ec7SHangbin Liuip -n $sw link add br0 type bridge
38*152e8ec7SHangbin Liuip -n $sw link set br0 up
39*152e8ec7SHangbin Liusw_lladdr=$(ip -n $sw addr show br0 | awk '/fe80/{print $2}' | cut -d'/' -f1)
40*152e8ec7SHangbin Liu# sleep some time to make sure bridge lladdr pass DAD
41*152e8ec7SHangbin Liusleep 2
42*152e8ec7SHangbin Liu
43*152e8ec7SHangbin Liuip -n $host link add bond0 type bond mode 1 ns_ip6_target ${sw_lladdr} \
44*152e8ec7SHangbin Liu	arp_validate 3 arp_interval 1000
45*152e8ec7SHangbin Liu# add a lladdr for bond to make sure there is a route to target
46*152e8ec7SHangbin Liuip -n $host addr add fe80::beef/64 dev bond0
47*152e8ec7SHangbin Liuip -n $host link set bond0 up
48*152e8ec7SHangbin Liuip -n $host link set veth0 master bond0
49*152e8ec7SHangbin Liuip -n $host link set veth1 master bond0
50*152e8ec7SHangbin Liu
51*152e8ec7SHangbin Liuip -n $sw link set veth0 master br0
52*152e8ec7SHangbin Liuip -n $sw link set veth1 master br0
53*152e8ec7SHangbin Liuip -n $sw link set veth0 up
54*152e8ec7SHangbin Liuip -n $sw link set veth1 up
55*152e8ec7SHangbin Liu
56*152e8ec7SHangbin Liusleep 5
57*152e8ec7SHangbin Liu
58*152e8ec7SHangbin Liurc=0
59*152e8ec7SHangbin Liuif ip -n $host link show bond0 | grep -q LOWER_UP; then
60*152e8ec7SHangbin Liu	echo "PASS"
61*152e8ec7SHangbin Liuelse
62*152e8ec7SHangbin Liu	echo "FAIL"
63*152e8ec7SHangbin Liu	rc=1
64*152e8ec7SHangbin Liufi
65*152e8ec7SHangbin Liuexit $rc
66