Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
mariux64
/
linux
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
2
Pull requests
0
Actions
Projects
0
Wiki
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security
Insights
Files
9ee53e3
Documentation
LICENSES
arch
block
certs
crypto
drivers
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
tools
accounting
arch
bootconfig
bpf
build
cgroup
debugging
edid
firewire
firmware
gpio
hv
iio
include
io_uring
kvm
laptop
leds
lib
memory-model
objtool
pci
pcmcia
perf
power
scripts
spi
testing
fault-injection
ktest
kunit
nvdimm
radix-tree
scatterlist
selftests
arm64
bpf
breakpoints
capabilities
cgroup
clone3
core
cpu-hotplug
cpufreq
dma
dmabuf-heaps
drivers
dma-buf
gpu
net
mlxsw
netdevsim
devlink.sh
devlink_in_netns.sh
devlink_trap.sh
ethtool-coalesce.sh
ethtool-common.sh
ethtool-pause.sh
ethtool-ring.sh
fib.sh
fib_notifications.sh
nexthop.sh
udp_tunnel_nic.sh
ocelot
usb
.gitignore
efivarfs
exec
filesystems
firmware
fpu
ftrace
futex
gpio
ia64
intel_pstate
ipc
ir
kcmp
kexec
kmod
kselftest
kvm
lib
livepatch
lkdtm
locking
media_tests
membarrier
memfd
memory-hotplug
mincore
mount
mqueue
nci
net
netfilter
nsfs
ntb
openat2
pid_namespace
pidfd
powerpc
prctl
proc
pstore
ptp
ptrace
rcutorture
resctrl
rseq
rtc
safesetid
seccomp
sgx
sigaltstack
size
sparc64
splice
static_keys
sync
syscall_user_dispatch
sysctl
tc-testing
timens
timers
tmpfs
tpm2
uevent
user
vDSO
vm
watchdog
wireguard
x86
zram
.gitignore
Makefile
gen_kselftest_tar.sh
kselftest.h
kselftest_deps.sh
kselftest_harness.h
kselftest_install.sh
kselftest_module.h
lib.mk
run_kselftest.sh
vsock
thermal
time
usb
virtio
vm
wmi
Makefile
usr
virt
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
README
Breadcrumbs
linux
/
tools
/
testing
/
selftests
/
drivers
/
net
/
netdevsim
/
fib_notifications.sh
Blame
Blame
Latest commit
History
History
executable file
·
430 lines (331 loc) · 10.2 KB
Breadcrumbs
linux
/
tools
/
testing
/
selftests
/
drivers
/
net
/
netdevsim
/
fib_notifications.sh
Top
File metadata and controls
Code
Blame
executable file
·
430 lines (331 loc) · 10.2 KB
Raw
#!/bin/bash # SPDX-License-Identifier: GPL-2.0 lib_dir=$(dirname $0)/../../../net/forwarding ALL_TESTS=" ipv4_route_addition_test ipv4_route_deletion_test ipv4_route_replacement_test ipv4_route_offload_failed_test ipv6_route_addition_test ipv6_route_deletion_test ipv6_route_replacement_test ipv6_route_offload_failed_test " NETDEVSIM_PATH=/sys/bus/netdevsim/ DEV_ADDR=1337 DEV=netdevsim${DEV_ADDR} DEVLINK_DEV=netdevsim/${DEV} SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/ DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV/ NUM_NETIFS=0 source $lib_dir/lib.sh check_rt_offload_failed() { local outfile=$1; shift local line # Make sure that the first notification was emitted without # RTM_F_OFFLOAD_FAILED flag and the second with RTM_F_OFFLOAD_FAILED # flag head -n 1 $outfile | grep -q "rt_offload_failed" if [[ $? -eq 0 ]]; then return 1 fi head -n 2 $outfile | tail -n 1 | grep -q "rt_offload_failed" } check_rt_trap() { local outfile=$1; shift local line # Make sure that the first notification was emitted without RTM_F_TRAP # flag and the second with RTM_F_TRAP flag head -n 1 $outfile | grep -q "rt_trap" if [[ $? -eq 0 ]]; then return 1 fi head -n 2 $outfile | tail -n 1 | grep -q "rt_trap" } route_notify_check() { local outfile=$1; shift local expected_num_lines=$1; shift local offload_failed=${1:-0}; shift # check the monitor results lines=`wc -l $outfile | cut "-d " -f1` test $lines -eq $expected_num_lines check_err $? "$expected_num_lines notifications were expected but $lines were received" if [[ $expected_num_lines -eq 1 ]]; then return fi if [[ $offload_failed -eq 0 ]]; then check_rt_trap $outfile check_err $? "Wrong RTM_F_TRAP flags in notifications" else check_rt_offload_failed $outfile check_err $? "Wrong RTM_F_OFFLOAD_FAILED flags in notifications" fi } route_addition_check() { local ip=$1; shift local notify=$1; shift local route=$1; shift local expected_num_notifications=$1; shift local offload_failed=${1:-0}; shift ip netns exec testns1 sysctl -qw net.$ip.fib_notify_on_flag_change=$notify local outfile=$(mktemp) $IP monitor route &> $outfile & sleep 1 $IP route add $route dev dummy1 sleep 1 kill %% && wait %% &> /dev/null route_notify_check $outfile $expected_num_notifications $offload_failed rm -f $outfile $IP route del $route dev dummy1 } ipv4_route_addition_test() { RET=0 local ip="ipv4" local route=192.0.2.0/24 # Make sure a single notification will be emitted for the programmed # route. local notify=0 local expected_num_notifications=1 # route_addition_check will assign value to RET. route_addition_check $ip $notify $route $expected_num_notifications # Make sure two notifications will be emitted for the programmed route. notify=1 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications # notify=2 means emit notifications only for failed route installation, # make sure a single notification will be emitted for the programmed # route. notify=2 expected_num_notifications=1 route_addition_check $ip $notify $route $expected_num_notifications log_test "IPv4 route addition" } route_deletion_check() { local ip=$1; shift local notify=$1; shift local route=$1; shift local expected_num_notifications=$1; shift ip netns exec testns1 sysctl -qw net.$ip.fib_notify_on_flag_change=$notify $IP route add $route dev dummy1 sleep 1 local outfile=$(mktemp) $IP monitor route &> $outfile & sleep 1 $IP route del $route dev dummy1 sleep 1 kill %% && wait %% &> /dev/null route_notify_check $outfile $expected_num_notifications rm -f $outfile } ipv4_route_deletion_test() { RET=0 local ip="ipv4" local route=192.0.2.0/24 local expected_num_notifications=1 # Make sure a single notification will be emitted for the deleted route, # regardless of fib_notify_on_flag_change value. local notify=0 # route_deletion_check will assign value to RET. route_deletion_check $ip $notify $route $expected_num_notifications notify=1 route_deletion_check $ip $notify $route $expected_num_notifications log_test "IPv4 route deletion" } route_replacement_check() { local ip=$1; shift local notify=$1; shift local route=$1; shift local expected_num_notifications=$1; shift ip netns exec testns1 sysctl -qw net.$ip.fib_notify_on_flag_change=$notify $IP route add $route dev dummy1 sleep 1 local outfile=$(mktemp) $IP monitor route &> $outfile & sleep 1 $IP route replace $route dev dummy2 sleep 1 kill %% && wait %% &> /dev/null route_notify_check $outfile $expected_num_notifications rm -f $outfile $IP route del $route dev dummy2 } ipv4_route_replacement_test() { RET=0 local ip="ipv4" local route=192.0.2.0/24 $IP link add name dummy2 type dummy $IP link set dev dummy2 up # Make sure a single notification will be emitted for the new route. local notify=0 local expected_num_notifications=1 # route_replacement_check will assign value to RET. route_replacement_check $ip $notify $route $expected_num_notifications # Make sure two notifications will be emitted for the new route. notify=1 expected_num_notifications=2 route_replacement_check $ip $notify $route $expected_num_notifications # notify=2 means emit notifications only for failed route installation, # make sure a single notification will be emitted for the new route. notify=2 expected_num_notifications=1 route_replacement_check $ip $notify $route $expected_num_notifications $IP link del name dummy2 log_test "IPv4 route replacement" } ipv4_route_offload_failed_test() { RET=0 local ip="ipv4" local route=192.0.2.0/24 local offload_failed=1 echo "y"> $DEBUGFS_DIR/fib/fail_route_offload check_err $? "Failed to setup route offload to fail" # Make sure a single notification will be emitted for the programmed # route. local notify=0 local expected_num_notifications=1 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed # Make sure two notifications will be emitted for the new route. notify=1 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed # notify=2 means emit notifications only for failed route installation, # make sure two notifications will be emitted for the new route. notify=2 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed echo "n"> $DEBUGFS_DIR/fib/fail_route_offload check_err $? "Failed to setup route offload not to fail" log_test "IPv4 route offload failed" } ipv6_route_addition_test() { RET=0 local ip="ipv6" local route=2001:db8:1::/64 # Make sure a single notification will be emitted for the programmed # route. local notify=0 local expected_num_notifications=1 route_addition_check $ip $notify $route $expected_num_notifications # Make sure two notifications will be emitted for the programmed route. notify=1 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications # notify=2 means emit notifications only for failed route installation, # make sure a single notification will be emitted for the programmed # route. notify=2 expected_num_notifications=1 route_addition_check $ip $notify $route $expected_num_notifications log_test "IPv6 route addition" } ipv6_route_deletion_test() { RET=0 local ip="ipv6" local route=2001:db8:1::/64 local expected_num_notifications=1 # Make sure a single notification will be emitted for the deleted route, # regardless of fib_notify_on_flag_change value. local notify=0 route_deletion_check $ip $notify $route $expected_num_notifications notify=1 route_deletion_check $ip $notify $route $expected_num_notifications log_test "IPv6 route deletion" } ipv6_route_replacement_test() { RET=0 local ip="ipv6" local route=2001:db8:1::/64 $IP link add name dummy2 type dummy $IP link set dev dummy2 up # Make sure a single notification will be emitted for the new route. local notify=0 local expected_num_notifications=1 route_replacement_check $ip $notify $route $expected_num_notifications # Make sure two notifications will be emitted for the new route. notify=1 expected_num_notifications=2 route_replacement_check $ip $notify $route $expected_num_notifications # notify=2 means emit notifications only for failed route installation, # make sure a single notification will be emitted for the new route. notify=2 expected_num_notifications=1 route_replacement_check $ip $notify $route $expected_num_notifications $IP link del name dummy2 log_test "IPv6 route replacement" } ipv6_route_offload_failed_test() { RET=0 local ip="ipv6" local route=2001:db8:1::/64 local offload_failed=1 echo "y"> $DEBUGFS_DIR/fib/fail_route_offload check_err $? "Failed to setup route offload to fail" # Make sure a single notification will be emitted for the programmed # route. local notify=0 local expected_num_notifications=1 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed # Make sure two notifications will be emitted for the new route. notify=1 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed # notify=2 means emit notifications only for failed route installation, # make sure two notifications will be emitted for the new route. notify=2 expected_num_notifications=2 route_addition_check $ip $notify $route $expected_num_notifications \ $offload_failed echo "n"> $DEBUGFS_DIR/fib/fail_route_offload check_err $? "Failed to setup route offload not to fail" log_test "IPv6 route offload failed" } setup_prepare() { modprobe netdevsim &> /dev/null echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device while [ ! -d $SYSFS_NET_DIR ] ; do :; done ip netns add testns1 if [ $? -ne 0 ]; then echo "Failed to add netns \"testns1\"" exit 1 fi devlink dev reload $DEVLINK_DEV netns testns1 if [ $? -ne 0 ]; then echo "Failed to reload into netns \"testns1\"" exit 1 fi IP="ip -n testns1" $IP link add name dummy1 type dummy $IP link set dev dummy1 up } cleanup() { pre_cleanup $IP link del name dummy1 ip netns del testns1 echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device modprobe -r netdevsim &> /dev/null } trap cleanup EXIT setup_prepare tests_run exit $EXIT_STATUS
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
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
You can’t perform that action at this time.