Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ALL_TESTS="ping_ipv4"
0005 NUM_NETIFS=6
0006 source lib.sh
0007 
0008 h1_create()
0009 {
0010         vrf_create "vrf-h1"
0011         ip link set dev $h1 master vrf-h1
0012 
0013         ip link set dev vrf-h1 up
0014         ip link set dev $h1 up
0015 
0016         ip address add 192.0.2.2/24 dev $h1
0017 
0018         ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
0019         ip route add 198.51.200.0/24 vrf vrf-h1 nexthop via 192.0.2.1
0020 }
0021 
0022 h1_destroy()
0023 {
0024         ip route del 198.51.200.0/24 vrf vrf-h1
0025         ip route del 198.51.100.0/24 vrf vrf-h1
0026 
0027         ip address del 192.0.2.2/24 dev $h1
0028 
0029         ip link set dev $h1 down
0030         vrf_destroy "vrf-h1"
0031 }
0032 
0033 h2_create()
0034 {
0035         vrf_create "vrf-h2"
0036         ip link set dev $h2 master vrf-h2
0037 
0038         ip link set dev vrf-h2 up
0039         ip link set dev $h2 up
0040 
0041         ip address add 198.51.100.2/24 dev $h2
0042 
0043         ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
0044         ip route add 198.51.200.0/24 vrf vrf-h2 nexthop via 198.51.100.1
0045 }
0046 
0047 h2_destroy()
0048 {
0049         ip route del 198.51.200.0/24 vrf vrf-h2
0050         ip route del 192.0.2.0/24 vrf vrf-h2
0051 
0052         ip address del 198.51.100.2/24 dev $h2
0053 
0054         ip link set dev $h2 down
0055         vrf_destroy "vrf-h2"
0056 }
0057 
0058 h3_create()
0059 {
0060         vrf_create "vrf-h3"
0061         ip link set dev $h3 master vrf-h3
0062 
0063         ip link set dev vrf-h3 up
0064         ip link set dev $h3 up
0065 
0066         ip address add 198.51.200.2/24 dev $h3
0067 
0068         ip route add 192.0.2.0/24 vrf vrf-h3 nexthop via 198.51.200.1
0069         ip route add 198.51.100.0/24 vrf vrf-h3 nexthop via 198.51.200.1
0070 }
0071 
0072 h3_destroy()
0073 {
0074         ip route del 198.51.100.0/24 vrf vrf-h3
0075         ip route del 192.0.2.0/24 vrf vrf-h3
0076 
0077         ip address del 198.51.200.2/24 dev $h3
0078 
0079         ip link set dev $h3 down
0080         vrf_destroy "vrf-h3"
0081 }
0082 
0083 router_create()
0084 {
0085         ip link set dev $rp1 up
0086         ip link set dev $rp2 up
0087         ip link set dev $rp3 up
0088 
0089         ip address add 192.0.2.1/24 dev $rp1
0090 
0091         ip address add 198.51.100.1/24 dev $rp2
0092         ip address add 198.51.200.1/24 dev $rp3
0093 }
0094 
0095 router_destroy()
0096 {
0097         ip address del 198.51.200.1/24 dev $rp3
0098         ip address del 198.51.100.1/24 dev $rp2
0099 
0100         ip address del 192.0.2.1/24 dev $rp1
0101 
0102         ip link set dev $rp3 down
0103         ip link set dev $rp2 down
0104         ip link set dev $rp1 down
0105 }
0106 
0107 setup_prepare()
0108 {
0109         h1=${NETIFS[p1]}
0110         rp1=${NETIFS[p2]}
0111 
0112         rp2=${NETIFS[p3]}
0113         h2=${NETIFS[p4]}
0114 
0115         rp3=${NETIFS[p5]}
0116         h3=${NETIFS[p6]}
0117 
0118         vrf_prepare
0119 
0120         h1_create
0121         h2_create
0122         h3_create
0123 
0124         router_create
0125 
0126         forwarding_enable
0127 }
0128 
0129 cleanup()
0130 {
0131         pre_cleanup
0132 
0133         forwarding_restore
0134 
0135         router_destroy
0136 
0137         h3_destroy
0138         h2_destroy
0139         h1_destroy
0140 
0141         vrf_cleanup
0142 }
0143 
0144 bc_forwarding_disable()
0145 {
0146         sysctl_set net.ipv4.conf.all.bc_forwarding 0
0147         sysctl_set net.ipv4.conf.$rp1.bc_forwarding 0
0148         sysctl_set net.ipv4.conf.$rp2.bc_forwarding 0
0149 }
0150 
0151 bc_forwarding_enable()
0152 {
0153         sysctl_set net.ipv4.conf.all.bc_forwarding 1
0154         sysctl_set net.ipv4.conf.$rp1.bc_forwarding 1
0155         sysctl_set net.ipv4.conf.$rp2.bc_forwarding 1
0156 }
0157 
0158 bc_forwarding_restore()
0159 {
0160         sysctl_restore net.ipv4.conf.$rp2.bc_forwarding
0161         sysctl_restore net.ipv4.conf.$rp1.bc_forwarding
0162         sysctl_restore net.ipv4.conf.all.bc_forwarding
0163 }
0164 
0165 ping_test_from()
0166 {
0167         local oif=$1
0168         local dip=$2
0169         local from=$3
0170         local fail=${4:-0}
0171 
0172         RET=0
0173 
0174         log_info "ping $dip, expected reply from $from"
0175         ip vrf exec $(master_name_get $oif) \
0176                 $PING -I $oif $dip -c 10 -i 0.1 -w $PING_TIMEOUT -b 2>&1 \
0177                 | grep "bytes from $from" > /dev/null
0178         check_err_fail $fail $?
0179 }
0180 
0181 ping_ipv4()
0182 {
0183         sysctl_set net.ipv4.icmp_echo_ignore_broadcasts 0
0184 
0185         bc_forwarding_disable
0186         log_info "bc_forwarding disabled on r1 =>"
0187         ping_test_from $h1 198.51.100.255 192.0.2.1
0188         log_test "h1 -> net2: reply from r1 (not forwarding)"
0189         ping_test_from $h1 198.51.200.255 192.0.2.1
0190         log_test "h1 -> net3: reply from r1 (not forwarding)"
0191         ping_test_from $h1 192.0.2.255 192.0.2.1
0192         log_test "h1 -> net1: reply from r1 (not dropping)"
0193         ping_test_from $h1 255.255.255.255 192.0.2.1
0194         log_test "h1 -> 255.255.255.255: reply from r1 (not forwarding)"
0195 
0196         ping_test_from $h2 192.0.2.255 198.51.100.1
0197         log_test "h2 -> net1: reply from r1 (not forwarding)"
0198         ping_test_from $h2 198.51.200.255 198.51.100.1
0199         log_test "h2 -> net3: reply from r1 (not forwarding)"
0200         ping_test_from $h2 198.51.100.255 198.51.100.1
0201         log_test "h2 -> net2: reply from r1 (not dropping)"
0202         ping_test_from $h2 255.255.255.255 198.51.100.1
0203         log_test "h2 -> 255.255.255.255: reply from r1 (not forwarding)"
0204         bc_forwarding_restore
0205 
0206         bc_forwarding_enable
0207         log_info "bc_forwarding enabled on r1 =>"
0208         ping_test_from $h1 198.51.100.255 198.51.100.2
0209         log_test "h1 -> net2: reply from h2 (forwarding)"
0210         ping_test_from $h1 198.51.200.255 198.51.200.2
0211         log_test "h1 -> net3: reply from h3 (forwarding)"
0212         ping_test_from $h1 192.0.2.255 192.0.2.1 1
0213         log_test "h1 -> net1: no reply (dropping)"
0214         ping_test_from $h1 255.255.255.255 192.0.2.1
0215         log_test "h1 -> 255.255.255.255: reply from r1 (not forwarding)"
0216 
0217         ping_test_from $h2 192.0.2.255 192.0.2.2
0218         log_test "h2 -> net1: reply from h1 (forwarding)"
0219         ping_test_from $h2 198.51.200.255 198.51.200.2
0220         log_test "h2 -> net3: reply from h3 (forwarding)"
0221         ping_test_from $h2 198.51.100.255 198.51.100.1 1
0222         log_test "h2 -> net2: no reply (dropping)"
0223         ping_test_from $h2 255.255.255.255 198.51.100.1
0224         log_test "h2 -> 255.255.255.255: reply from r1 (not forwarding)"
0225         bc_forwarding_restore
0226 
0227         sysctl_restore net.ipv4.icmp_echo_ignore_broadcasts
0228 }
0229 
0230 trap cleanup EXIT
0231 
0232 setup_prepare
0233 setup_wait
0234 
0235 tests_run
0236 
0237 exit $EXIT_STATUS