0001
0002
0003
0004 ALL_TESTS="
0005 ping_ipv4
0006 ping_ipv6
0007 "
0008
0009 NUM_NETIFS=4
0010 source lib.sh
0011 source tc_common.sh
0012
0013 h1_create()
0014 {
0015 vrf_create "vrf-h1"
0016 ip link set dev $h1 master vrf-h1
0017
0018 ip link set dev vrf-h1 up
0019 ip link set dev $h1 up
0020
0021 ip address add 192.0.2.2/24 dev $h1
0022 ip address add 2001:db8:1::2/64 dev $h1
0023
0024 ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
0025 ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
0026 }
0027
0028 h1_destroy()
0029 {
0030 ip route del 2001:db8:2::/64 vrf vrf-h1
0031 ip route del 198.51.100.0/24 vrf vrf-h1
0032
0033 ip address del 2001:db8:1::2/64 dev $h1
0034 ip address del 192.0.2.2/24 dev $h1
0035
0036 ip link set dev $h1 down
0037 vrf_destroy "vrf-h1"
0038 }
0039
0040 h2_create()
0041 {
0042 vrf_create "vrf-h2"
0043 ip link set dev $h2 master vrf-h2
0044
0045 ip link set dev vrf-h2 up
0046 ip link set dev $h2 up
0047
0048 ip address add 198.51.100.2/24 dev $h2
0049 ip address add 2001:db8:2::2/64 dev $h2
0050
0051 ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
0052 ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
0053 }
0054
0055 h2_destroy()
0056 {
0057 ip route del 2001:db8:1::/64 vrf vrf-h2
0058 ip route del 192.0.2.0/24 vrf vrf-h2
0059
0060 ip address del 2001:db8:2::2/64 dev $h2
0061 ip address del 198.51.100.2/24 dev $h2
0062
0063 ip link set dev $h2 down
0064 vrf_destroy "vrf-h2"
0065 }
0066
0067 router_create()
0068 {
0069 ip link set dev $rp1 up
0070 ip link set dev $rp2 up
0071
0072 tc qdisc add dev $rp2 clsact
0073
0074 ip address add 192.0.2.1/24 dev $rp1
0075 ip address add 2001:db8:1::1/64 dev $rp1
0076
0077 ip address add 198.51.100.1/24 dev $rp2
0078 ip address add 2001:db8:2::1/64 dev $rp2
0079 }
0080
0081 router_destroy()
0082 {
0083 ip address del 2001:db8:2::1/64 dev $rp2
0084 ip address del 198.51.100.1/24 dev $rp2
0085
0086 ip address del 2001:db8:1::1/64 dev $rp1
0087 ip address del 192.0.2.1/24 dev $rp1
0088
0089 tc qdisc del dev $rp2 clsact
0090
0091 ip link set dev $rp2 down
0092 ip link set dev $rp1 down
0093 }
0094
0095 routing_nh_obj()
0096 {
0097
0098
0099 ip -6 nexthop add id 101 dev $rp1
0100 ip -6 nexthop add id 102 dev $rp2
0101
0102 ip route replace 192.0.2.0/24 nhid 101
0103 ip route replace 2001:db8:1::/64 nhid 101
0104 ip route replace 198.51.100.0/24 nhid 102
0105 ip route replace 2001:db8:2::/64 nhid 102
0106 }
0107
0108 setup_prepare()
0109 {
0110 h1=${NETIFS[p1]}
0111 rp1=${NETIFS[p2]}
0112
0113 rp2=${NETIFS[p3]}
0114 h2=${NETIFS[p4]}
0115
0116 rp1mac=$(mac_get $rp1)
0117
0118 vrf_prepare
0119
0120 h1_create
0121 h2_create
0122
0123 router_create
0124
0125 forwarding_enable
0126 }
0127
0128 cleanup()
0129 {
0130 pre_cleanup
0131
0132 forwarding_restore
0133
0134 router_destroy
0135
0136 h2_destroy
0137 h1_destroy
0138
0139 vrf_cleanup
0140 }
0141
0142 ping_ipv4()
0143 {
0144 ping_test $h1 198.51.100.2
0145 }
0146
0147 ping_ipv6()
0148 {
0149 ping6_test $h1 2001:db8:2::2
0150 }
0151
0152 trap cleanup EXIT
0153
0154 setup_prepare
0155 setup_wait
0156 routing_nh_obj
0157
0158 tests_run
0159
0160 exit $EXIT_STATUS