1415b7cefSSabrina Dubroca#!/bin/bash 2415b7cefSSabrina Dubroca# SPDX-License-Identifier: GPL-2.0-only 3415b7cefSSabrina Dubroca 4415b7cefSSabrina Dubrocasource ethtool-common.sh 5415b7cefSSabrina Dubroca 6415b7cefSSabrina DubrocaNSIM_NETDEV=$(make_netdev) 7415b7cefSSabrina DubrocaMACSEC_NETDEV=macsec_nsim 8415b7cefSSabrina Dubroca 9415b7cefSSabrina Dubrocaset -o pipefail 10415b7cefSSabrina Dubroca 11415b7cefSSabrina Dubrocaif ! ethtool -k $NSIM_NETDEV | grep -q 'macsec-hw-offload: on'; then 12415b7cefSSabrina Dubroca echo "SKIP: netdevsim doesn't support MACsec offload" 13415b7cefSSabrina Dubroca exit 4 14415b7cefSSabrina Dubrocafi 15415b7cefSSabrina Dubroca 16415b7cefSSabrina Dubrocaif ! ip link add link $NSIM_NETDEV $MACSEC_NETDEV type macsec offload mac 2>/dev/null; then 17415b7cefSSabrina Dubroca echo "SKIP: couldn't create macsec device" 18415b7cefSSabrina Dubroca exit 4 19415b7cefSSabrina Dubrocafi 20415b7cefSSabrina Dubrocaip link del $MACSEC_NETDEV 21415b7cefSSabrina Dubroca 22415b7cefSSabrina Dubroca# 23415b7cefSSabrina Dubroca# test macsec offload API 24415b7cefSSabrina Dubroca# 25415b7cefSSabrina Dubroca 26415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}" type macsec port 4 offload mac 27415b7cefSSabrina Dubrocacheck $? 28415b7cefSSabrina Dubroca 29415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}2" type macsec address "aa:bb:cc:dd:ee:ff" port 5 offload mac 30415b7cefSSabrina Dubrocacheck $? 31415b7cefSSabrina Dubroca 32415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}3" type macsec sci abbacdde01020304 offload mac 33415b7cefSSabrina Dubrocacheck $? 34415b7cefSSabrina Dubroca 35415b7cefSSabrina Dubrocaip link add link $NSIM_NETDEV "${MACSEC_NETDEV}4" type macsec port 8 offload mac 2> /dev/null 36415b7cefSSabrina Dubrocacheck $? '' '' 1 37415b7cefSSabrina Dubroca 38415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" tx sa 0 pn 1024 on key 01 12345678901234567890123456789012 39415b7cefSSabrina Dubrocacheck $? 40415b7cefSSabrina Dubroca 41415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef" 42415b7cefSSabrina Dubrocacheck $? 43415b7cefSSabrina Dubroca 44415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1234 address "1c:ed:de:ad:be:ef" sa 0 pn 1 on \ 45415b7cefSSabrina Dubroca key 00 0123456789abcdef0123456789abcdef 46415b7cefSSabrina Dubrocacheck $? 47415b7cefSSabrina Dubroca 48415b7cefSSabrina Dubrocaip macsec add "${MACSEC_NETDEV}" rx port 1235 address "1c:ed:de:ad:be:ef" 2> /dev/null 49415b7cefSSabrina Dubrocacheck $? '' '' 1 50415b7cefSSabrina Dubroca 51*29084ea5SSabrina Dubroca# can't disable macsec offload when SAs are configured 52*29084ea5SSabrina Dubrocaip link set "${MACSEC_NETDEV}" type macsec offload off 2> /dev/null 53*29084ea5SSabrina Dubrocacheck $? '' '' 1 54*29084ea5SSabrina Dubroca 55*29084ea5SSabrina Dubrocaip macsec offload "${MACSEC_NETDEV}" off 2> /dev/null 56*29084ea5SSabrina Dubrocacheck $? '' '' 1 57*29084ea5SSabrina Dubroca 58*29084ea5SSabrina Dubroca# toggle macsec offload via rtnetlink 59*29084ea5SSabrina Dubrocaip link set "${MACSEC_NETDEV}2" type macsec offload off 60*29084ea5SSabrina Dubrocacheck $? 61*29084ea5SSabrina Dubroca 62*29084ea5SSabrina Dubrocaip link set "${MACSEC_NETDEV}2" type macsec offload mac 63*29084ea5SSabrina Dubrocacheck $? 64*29084ea5SSabrina Dubroca 65*29084ea5SSabrina Dubroca# toggle macsec offload via genetlink 66*29084ea5SSabrina Dubrocaip macsec offload "${MACSEC_NETDEV}2" off 67*29084ea5SSabrina Dubrocacheck $? 68*29084ea5SSabrina Dubroca 69*29084ea5SSabrina Dubrocaip macsec offload "${MACSEC_NETDEV}2" mac 70*29084ea5SSabrina Dubrocacheck $? 71*29084ea5SSabrina Dubroca 72415b7cefSSabrina Dubrocafor dev in ${MACSEC_NETDEV}{,2,3} ; do 73415b7cefSSabrina Dubroca ip link del $dev 74415b7cefSSabrina Dubroca check $? 75415b7cefSSabrina Dubrocadone 76415b7cefSSabrina Dubroca 77415b7cefSSabrina Dubroca 78415b7cefSSabrina Dubrocaif [ $num_errors -eq 0 ]; then 79415b7cefSSabrina Dubroca echo "PASSED all $((num_passes)) checks" 80415b7cefSSabrina Dubroca exit 0 81415b7cefSSabrina Dubrocaelse 82415b7cefSSabrina Dubroca echo "FAILED $num_errors/$((num_errors+num_passes)) checks" 83415b7cefSSabrina Dubroca exit 1 84415b7cefSSabrina Dubrocafi 85