Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/testing/selftests/drivers/net/netdevsim/macsec-offload.sh
26299 views
1
#!/bin/bash
2
# SPDX-License-Identifier: GPL-2.0-only
3
4
source ethtool-common.sh
5
6
NSIM_NETDEV=$(make_netdev)
7
MACSEC_NETDEV=macsec_nsim
8
9
set -o pipefail
10
11
if ! ethtool -k $NSIM_NETDEV | grep -q 'macsec-hw-offload: on'; then
12
echo "SKIP: netdevsim doesn't support MACsec offload"
13
exit 4
14
fi
15
16
if ! ip link add link $NSIM_NETDEV $MACSEC_NETDEV type macsec offload mac 2>/dev/null; then
17
echo "SKIP: couldn't create macsec device"
18
exit 4
19
fi
20
ip link del $MACSEC_NETDEV
21
22
#
23
# test macsec offload API
24
#
25
26
ip link add link $NSIM_NETDEV "${MACSEC_NETDEV}" type macsec port 4 offload mac
27
check $?
28
29
ip link add link $NSIM_NETDEV "${MACSEC_NETDEV}2" type macsec address "aa:bb:cc:dd:ee:ff" port 5 offload mac
30
check $?
31
32
ip link add link $NSIM_NETDEV "${MACSEC_NETDEV}3" type macsec sci abbacdde01020304 offload mac
33
check $?
34
35
ip link add link $NSIM_NETDEV "${MACSEC_NETDEV}4" type macsec port 8 offload mac 2> /dev/null
36
check $? '' '' 1
37
38
ip macsec add "${MACSEC_NETDEV}" tx sa 0 pn 1024 on key 01 12345678901234567890123456789012
39
check $?
40
41
ip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef"
42
check $?
43
44
ip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef" sa 0 pn 1 on \
45
key 00 0123456789abcdef0123456789abcdef
46
check $?
47
48
ip macsec add "${MACSEC_NETDEV}" rx port 1235 address "1c:ed:de:ad:be:ef" 2> /dev/null
49
check $? '' '' 1
50
51
# can't disable macsec offload when SAs are configured
52
ip link set "${MACSEC_NETDEV}" type macsec offload off 2> /dev/null
53
check $? '' '' 1
54
55
ip macsec offload "${MACSEC_NETDEV}" off 2> /dev/null
56
check $? '' '' 1
57
58
# toggle macsec offload via rtnetlink
59
ip link set "${MACSEC_NETDEV}2" type macsec offload off
60
check $?
61
62
ip link set "${MACSEC_NETDEV}2" type macsec offload mac
63
check $?
64
65
# toggle macsec offload via genetlink
66
ip macsec offload "${MACSEC_NETDEV}2" off
67
check $?
68
69
ip macsec offload "${MACSEC_NETDEV}2" mac
70
check $?
71
72
for dev in ${MACSEC_NETDEV}{,2,3} ; do
73
ip link del $dev
74
check $?
75
done
76
77
78
#
79
# test ethtool features when toggling offload
80
#
81
82
ip link add link $NSIM_NETDEV $MACSEC_NETDEV type macsec offload mac
83
TMP_FEATS_ON_1="$(ethtool -k $MACSEC_NETDEV)"
84
85
ip link set $MACSEC_NETDEV type macsec offload off
86
TMP_FEATS_OFF_1="$(ethtool -k $MACSEC_NETDEV)"
87
88
ip link set $MACSEC_NETDEV type macsec offload mac
89
TMP_FEATS_ON_2="$(ethtool -k $MACSEC_NETDEV)"
90
91
[ "$TMP_FEATS_ON_1" = "$TMP_FEATS_ON_2" ]
92
check $?
93
94
ip link del $MACSEC_NETDEV
95
96
ip link add link $NSIM_NETDEV $MACSEC_NETDEV type macsec
97
check $?
98
99
TMP_FEATS_OFF_2="$(ethtool -k $MACSEC_NETDEV)"
100
[ "$TMP_FEATS_OFF_1" = "$TMP_FEATS_OFF_2" ]
101
check $?
102
103
ip link set $MACSEC_NETDEV type macsec offload mac
104
check $?
105
106
TMP_FEATS_ON_3="$(ethtool -k $MACSEC_NETDEV)"
107
[ "$TMP_FEATS_ON_1" = "$TMP_FEATS_ON_3" ]
108
check $?
109
110
111
if [ $num_errors -eq 0 ]; then
112
echo "PASSED all $((num_passes)) checks"
113
exit 0
114
else
115
echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
116
exit 1
117
fi
118
119