158ade67bSShijie Luo#!/bin/bash 258ade67bSShijie Luo# SPDX-License-Identifier: GPL-2.0 358ade67bSShijie Luo# 458ade67bSShijie Luo# Run a couple of tests when route_localnet = 1. 558ade67bSShijie Luo 658ade67bSShijie Luoreadonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" 758ade67bSShijie Luo 858ade67bSShijie Luosetup() { 958ade67bSShijie Luo ip netns add "${PEER_NS}" 1058ade67bSShijie Luo ip -netns "${PEER_NS}" link set dev lo up 1158ade67bSShijie Luo ip link add name veth0 type veth peer name veth1 1258ade67bSShijie Luo ip link set dev veth0 up 1358ade67bSShijie Luo ip link set dev veth1 netns "${PEER_NS}" 1458ade67bSShijie Luo 1558ade67bSShijie Luo # Enable route_localnet and delete useless route 127.0.0.0/8. 1658ade67bSShijie Luo sysctl -w net.ipv4.conf.veth0.route_localnet=1 1758ade67bSShijie Luo ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.route_localnet=1 1858ade67bSShijie Luo ip route del 127.0.0.0/8 dev lo table local 1958ade67bSShijie Luo ip netns exec "${PEER_NS}" ip route del 127.0.0.0/8 dev lo table local 2058ade67bSShijie Luo 2158ade67bSShijie Luo ifconfig veth0 127.25.3.4/24 up 2258ade67bSShijie Luo ip netns exec "${PEER_NS}" ifconfig veth1 127.25.3.14/24 up 2358ade67bSShijie Luo 2458ade67bSShijie Luo ip route flush cache 2558ade67bSShijie Luo ip netns exec "${PEER_NS}" ip route flush cache 2658ade67bSShijie Luo} 2758ade67bSShijie Luo 2858ade67bSShijie Luocleanup() { 2958ade67bSShijie Luo ip link del veth0 3058ade67bSShijie Luo ip route add local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 3158ade67bSShijie Luo local -r ns="$(ip netns list|grep $PEER_NS)" 3258ade67bSShijie Luo [ -n "$ns" ] && ip netns del $ns 2>/dev/null 3358ade67bSShijie Luo} 3458ade67bSShijie Luo 3558ade67bSShijie Luo# Run test when arp_announce = 2. 3658ade67bSShijie Luorun_arp_announce_test() { 3758ade67bSShijie Luo echo "run arp_announce test" 3858ade67bSShijie Luo setup 3958ade67bSShijie Luo 4058ade67bSShijie Luo sysctl -w net.ipv4.conf.veth0.arp_announce=2 4158ade67bSShijie Luo ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.arp_announce=2 4258ade67bSShijie Luo ping -c5 -I veth0 127.25.3.14 4358ade67bSShijie Luo if [ $? -ne 0 ];then 4458ade67bSShijie Luo echo "failed" 4558ade67bSShijie Luo else 4658ade67bSShijie Luo echo "ok" 4758ade67bSShijie Luo fi 4858ade67bSShijie Luo 4958ade67bSShijie Luo cleanup 5058ade67bSShijie Luo} 5158ade67bSShijie Luo 5258ade67bSShijie Luo# Run test when arp_ignore = 3. 5358ade67bSShijie Luorun_arp_ignore_test() { 5458ade67bSShijie Luo echo "run arp_ignore test" 5558ade67bSShijie Luo setup 5658ade67bSShijie Luo 5758ade67bSShijie Luo sysctl -w net.ipv4.conf.veth0.arp_ignore=3 5858ade67bSShijie Luo ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.arp_ignore=3 5958ade67bSShijie Luo ping -c5 -I veth0 127.25.3.14 6058ade67bSShijie Luo if [ $? -ne 0 ];then 6158ade67bSShijie Luo echo "failed" 6258ade67bSShijie Luo else 6358ade67bSShijie Luo echo "ok" 6458ade67bSShijie Luo fi 6558ade67bSShijie Luo 6658ade67bSShijie Luo cleanup 6758ade67bSShijie Luo} 6858ade67bSShijie Luo 6958ade67bSShijie Luorun_all_tests() { 7058ade67bSShijie Luo run_arp_announce_test 7158ade67bSShijie Luo run_arp_ignore_test 7258ade67bSShijie Luo} 7358ade67bSShijie Luo 7458ade67bSShijie Luorun_all_tests 75