1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3#
4# cause kernel oops in bond_rr_gen_slave_id
5DEBUG=${DEBUG:-0}
6
7set -e
8test ${DEBUG} -ne 0 && set -x
9
10finish()
11{
12	ip netns delete server || true
13	ip netns delete client || true
14}
15
16trap finish EXIT
17
18client_ip4=192.168.1.198
19server_ip4=192.168.1.254
20
21# setup kernel so it reboots after causing the panic
22echo 180 >/proc/sys/kernel/panic
23
24# build namespaces
25ip netns add "server"
26ip netns add "client"
27ip -n client link add eth0 type veth peer name eth0 netns server
28ip netns exec server ip link set dev eth0 up
29ip netns exec server ip addr add ${server_ip4}/24 dev eth0
30
31ip netns exec client ip link add dev bond0 down type bond mode 1 \
32	miimon 100 all_slaves_active 1
33ip netns exec client ip link set dev eth0 down master bond0
34ip netns exec client ip link set dev bond0 up
35ip netns exec client ip addr add ${client_ip4}/24 dev bond0
36ip netns exec client ping -c 5 $server_ip4 >/dev/null
37
38ip netns exec client ip link set dev eth0 down nomaster
39ip netns exec client ip link set dev bond0 down
40ip netns exec client ip link set dev bond0 type bond mode 0 \
41	arp_interval 1000 arp_ip_target "+${server_ip4}"
42ip netns exec client ip link set dev eth0 down master bond0
43ip netns exec client ip link set dev bond0 up
44ip netns exec client ping -c 5 $server_ip4 >/dev/null
45
46exit 0
47