1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Test ipv6 stats on the incoming if when forwarding with VRF
ALL_TESTS="
ipv6_ping
ipv6_in_too_big_err
ipv6_in_hdr_err
ipv6_in_addr_err
ipv6_in_discard
"
NUM_NETIFS=4
source lib.sh
h1_create()
{
simple_if_init $h1 2001:1:1::2/64
ip -6 route add vrf v$h1 2001:1:2::/64 via 2001:1:1::1
}
h1_destroy()
{
ip -6 route del vrf v$h1 2001:1:2::/64 via 2001:1:1::1
simple_if_fini $h1 2001:1:1::2/64
}
router_create()
{
vrf_create router
__simple_if_init $rtr1 router 2001:1:1::1/64
__simple_if_init $rtr2 router 2001:1:2::1/64
mtu_set $rtr2 1280
}
router_destroy()
{
mtu_restore $rtr2
__simple_if_fini $rtr2 2001:1:2::1/64
__simple_if_fini $rtr1 2001:1:1::1/64
vrf_destroy router
}
h2_create()
{
simple_if_init $h2 2001:1:2::2/64
ip -6 route add vrf v$h2 2001:1:1::/64 via 2001:1:2::1
mtu_set $h2 1280
}
h2_destroy()
{
mtu_restore $h2
ip -6 route del vrf v$h2 2001:1:1::/64 via 2001:1:2::1
simple_if_fini $h2 2001:1:2::2/64
}
setup_prepare()
{
h1=${NETIFS[p1]}
rtr1=${NETIFS[p2]}
rtr2=${NETIFS[p3]}
h2=${NETIFS[p4]}
vrf_prepare
h1_create
router_create
h2_create
forwarding_enable
}
cleanup()
{
pre_cleanup
forwarding_restore
h2_destroy
router_destroy
h1_destroy
vrf_cleanup
}
ipv6_in_too_big_err()
{
RET=0
local t0=$(ipv6_stats_get $rtr1 Ip6InTooBigErrors)
local vrf_name=$(master_name_get $h1)
# Send too big packets
ip vrf exec $vrf_name \
$PING6 -s 1300 2001:1:2::2 -c 1 -w $PING_TIMEOUT &> /dev/null
local t1=$(ipv6_stats_get $rtr1 Ip6InTooBigErrors)
test "$((t1 - t0))" -ne 0
check_err $?
log_test "Ip6InTooBigErrors"
}
ipv6_in_hdr_err()
{
RET=0
local t0=$(ipv6_stats_get $rtr1 Ip6InHdrErrors)
local vrf_name=$(master_name_get $h1)
# Send packets with hop limit 1, easiest with traceroute6 as some ping6
# doesn't allow hop limit to be specified
ip vrf exec $vrf_name \
$TROUTE6 2001:1:2::2 &> /dev/null
local t1=$(ipv6_stats_get $rtr1 Ip6InHdrErrors)
test "$((t1 - t0))" -ne 0
check_err $?
log_test "Ip6InHdrErrors"
}
ipv6_in_addr_err()
{
RET=0
local t0=$(ipv6_stats_get $rtr1 Ip6InAddrErrors)
local vrf_name=$(master_name_get $h1)
# Disable forwarding temporary while sending the packet
sysctl -qw net.ipv6.conf.all.forwarding=0
ip vrf exec $vrf_name \
$PING6 2001:1:2::2 -c 1 -w $PING_TIMEOUT &> /dev/null
sysctl -qw net.ipv6.conf.all.forwarding=1
local t1=$(ipv6_stats_get $rtr1 Ip6InAddrErrors)
test "$((t1 - t0))" -ne 0
check_err $?
log_test "Ip6InAddrErrors"
}
ipv6_in_discard()
{
RET=0
local t0=$(ipv6_stats_get $rtr1 Ip6InDiscards)
local vrf_name=$(master_name_get $h1)
# Add a policy to discard
ip xfrm policy add dst 2001:1:2::2/128 dir fwd action block
ip vrf exec $vrf_name \
$PING6 2001:1:2::2 -c 1 -w $PING_TIMEOUT &> /dev/null
ip xfrm policy del dst 2001:1:2::2/128 dir fwd
local t1=$(ipv6_stats_get $rtr1 Ip6InDiscards)
test "$((t1 - t0))" -ne 0
check_err $?
log_test "Ip6InDiscards"
}
ipv6_ping()
{
RET=0
ping6_test $h1 2001:1:2::2
}
trap cleanup EXIT
setup_prepare
setup_wait
tests_run
exit $EXIT_STATUS
|