1*415b7cefSSabrina Dubroca#!/bin/bash
2*415b7cefSSabrina Dubroca# SPDX-License-Identifier: GPL-2.0-only
3*415b7cefSSabrina Dubroca
4*415b7cefSSabrina Dubrocasource ethtool-common.sh
5*415b7cefSSabrina Dubroca
6*415b7cefSSabrina DubrocaNSIM_NETDEV=$(make_netdev)
7*415b7cefSSabrina DubrocaMACSEC_NETDEV=macsec_nsim
8*415b7cefSSabrina Dubroca
9*415b7cefSSabrina Dubrocaset -o pipefail
10*415b7cefSSabrina Dubroca
11*415b7cefSSabrina Dubrocaif ! ethtool -k $NSIM_NETDEV | grep -q 'macsec-hw-offload: on'; then
12*415b7cefSSabrina Dubroca    echo "SKIP: netdevsim doesn't support MACsec offload"
13*415b7cefSSabrina Dubroca    exit 4
14*415b7cefSSabrina Dubrocafi
15*415b7cefSSabrina Dubroca
16*415b7cefSSabrina Dubrocaif ! ip link add link $NSIM_NETDEV $MACSEC_NETDEV type macsec offload mac 2>/dev/null; then
17*415b7cefSSabrina Dubroca    echo "SKIP: couldn't create macsec device"
18*415b7cefSSabrina Dubroca    exit 4
19*415b7cefSSabrina Dubrocafi
20*415b7cefSSabrina Dubrocaip link del $MACSEC_NETDEV
21*415b7cefSSabrina Dubroca
22*415b7cefSSabrina Dubroca#
23*415b7cefSSabrina Dubroca# test macsec offload API
24*415b7cefSSabrina Dubroca#
25*415b7cefSSabrina Dubroca
26*415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}" type macsec port 4 offload mac
27*415b7cefSSabrina Dubrocacheck $?
28*415b7cefSSabrina Dubroca
29*415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}2" type macsec address "aa:bb:cc:dd:ee:ff" port 5 offload mac
30*415b7cefSSabrina Dubrocacheck $?
31*415b7cefSSabrina Dubroca
32*415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}3" type macsec sci abbacdde01020304 offload mac
33*415b7cefSSabrina Dubrocacheck $?
34*415b7cefSSabrina Dubroca
35*415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}4" type macsec port 8 offload mac 2> /dev/null
36*415b7cefSSabrina Dubrocacheck $? '' '' 1
37*415b7cefSSabrina Dubroca
38*415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" tx sa 0 pn 1024 on key 01 12345678901234567890123456789012
39*415b7cefSSabrina Dubrocacheck $?
40*415b7cefSSabrina Dubroca
41*415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef"
42*415b7cefSSabrina Dubrocacheck $?
43*415b7cefSSabrina Dubroca
44*415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef" sa 0 pn 1 on \
45*415b7cefSSabrina Dubroca    key 00 0123456789abcdef0123456789abcdef
46*415b7cefSSabrina Dubrocacheck $?
47*415b7cefSSabrina Dubroca
48*415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1235 address "1c:ed:de:ad:be:ef" 2> /dev/null
49*415b7cefSSabrina Dubrocacheck $? '' '' 1
50*415b7cefSSabrina Dubroca
51*415b7cefSSabrina Dubrocafor dev in ${MACSEC_NETDEV}{,2,3} ; do
52*415b7cefSSabrina Dubroca    ip link del $dev
53*415b7cefSSabrina Dubroca    check $?
54*415b7cefSSabrina Dubrocadone
55*415b7cefSSabrina Dubroca
56*415b7cefSSabrina Dubroca
57*415b7cefSSabrina Dubrocaif [ $num_errors -eq 0 ]; then
58*415b7cefSSabrina Dubroca    echo "PASSED all $((num_passes)) checks"
59*415b7cefSSabrina Dubroca    exit 0
60*415b7cefSSabrina Dubrocaelse
61*415b7cefSSabrina Dubroca    echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
62*415b7cefSSabrina Dubroca    exit 1
63*415b7cefSSabrina Dubrocafi
64