forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ipv6: When forwarding count rx stats on the orig netdev
Commit bdb7cc6 ("ipv6: Count interface receive statistics on the ingress netdev") does not work when ip6_forward() executes on the skbs with vrf-enslaved netdev. Use IP6CB(skb)->iif to get to the right one. Add a selftest script to verify. Fixes: bdb7cc6 ("ipv6: Count interface receive statistics on the ingress netdev") Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> Reviewed-by: David Ahern <dsahern@kernel.org> Link: https://lore.kernel.org/r/20211014130845.410602-1-ssuryaextr@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
- Loading branch information
1 parent
4884ddb
commit 0857d6f
Showing
5 changed files
with
185 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
172 changes: 172 additions & 0 deletions
172
tools/testing/selftests/net/forwarding/ip6_forward_instats_vrf.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters