1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Run a couple of tests when route_localnet = 1. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunreadonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunsetup() { 9*4882a593Smuzhiyun ip netns add "${PEER_NS}" 10*4882a593Smuzhiyun ip -netns "${PEER_NS}" link set dev lo up 11*4882a593Smuzhiyun ip link add name veth0 type veth peer name veth1 12*4882a593Smuzhiyun ip link set dev veth0 up 13*4882a593Smuzhiyun ip link set dev veth1 netns "${PEER_NS}" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun # Enable route_localnet and delete useless route 127.0.0.0/8. 16*4882a593Smuzhiyun sysctl -w net.ipv4.conf.veth0.route_localnet=1 17*4882a593Smuzhiyun ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.route_localnet=1 18*4882a593Smuzhiyun ip route del 127.0.0.0/8 dev lo table local 19*4882a593Smuzhiyun ip netns exec "${PEER_NS}" ip route del 127.0.0.0/8 dev lo table local 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun ifconfig veth0 127.25.3.4/24 up 22*4882a593Smuzhiyun ip netns exec "${PEER_NS}" ifconfig veth1 127.25.3.14/24 up 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun ip route flush cache 25*4882a593Smuzhiyun ip netns exec "${PEER_NS}" ip route flush cache 26*4882a593Smuzhiyun} 27*4882a593Smuzhiyun 28*4882a593Smuzhiyuncleanup() { 29*4882a593Smuzhiyun ip link del veth0 30*4882a593Smuzhiyun ip route add local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 31*4882a593Smuzhiyun local -r ns="$(ip netns list|grep $PEER_NS)" 32*4882a593Smuzhiyun [ -n "$ns" ] && ip netns del $ns 2>/dev/null 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun# Run test when arp_announce = 2. 36*4882a593Smuzhiyunrun_arp_announce_test() { 37*4882a593Smuzhiyun echo "run arp_announce test" 38*4882a593Smuzhiyun setup 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun sysctl -w net.ipv4.conf.veth0.arp_announce=2 41*4882a593Smuzhiyun ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.arp_announce=2 42*4882a593Smuzhiyun ping -c5 -I veth0 127.25.3.14 43*4882a593Smuzhiyun if [ $? -ne 0 ];then 44*4882a593Smuzhiyun echo "failed" 45*4882a593Smuzhiyun else 46*4882a593Smuzhiyun echo "ok" 47*4882a593Smuzhiyun fi 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun cleanup 50*4882a593Smuzhiyun} 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun# Run test when arp_ignore = 3. 53*4882a593Smuzhiyunrun_arp_ignore_test() { 54*4882a593Smuzhiyun echo "run arp_ignore test" 55*4882a593Smuzhiyun setup 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun sysctl -w net.ipv4.conf.veth0.arp_ignore=3 58*4882a593Smuzhiyun ip netns exec "${PEER_NS}" sysctl -w net.ipv4.conf.veth1.arp_ignore=3 59*4882a593Smuzhiyun ping -c5 -I veth0 127.25.3.14 60*4882a593Smuzhiyun if [ $? -ne 0 ];then 61*4882a593Smuzhiyun echo "failed" 62*4882a593Smuzhiyun else 63*4882a593Smuzhiyun echo "ok" 64*4882a593Smuzhiyun fi 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun cleanup 67*4882a593Smuzhiyun} 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunrun_all_tests() { 70*4882a593Smuzhiyun run_arp_announce_test 71*4882a593Smuzhiyun run_arp_ignore_test 72*4882a593Smuzhiyun} 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunrun_all_tests 75