Skip to content

Commit 2766a11

Browse files
Shannon Nelsondavem330
authored andcommitted
selftests: rtnetlink: add ipsec offload API test
Using the netdevsim as a device for testing, try out the XFRM commands for setting up IPsec hardware offloads. Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7699353 commit 2766a11

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

tools/testing/selftests/net/rtnetlink.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,119 @@ kci_test_ipsec()
611611
echo "PASS: ipsec"
612612
}
613613

614+
#-------------------------------------------------------------------
615+
# Example commands
616+
# ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \
617+
# spi 0x07 mode transport reqid 0x07 replay-window 32 \
618+
# aead 'rfc4106(gcm(aes))' 1234567890123456dcba 128 \
619+
# sel src 14.0.0.52/24 dst 14.0.0.70/24
620+
# offload dev sim1 dir out
621+
# ip x p add dir out src 14.0.0.52/24 dst 14.0.0.70/24 \
622+
# tmpl proto esp src 14.0.0.52 dst 14.0.0.70 \
623+
# spi 0x07 mode transport reqid 0x07
624+
#
625+
#-------------------------------------------------------------------
626+
kci_test_ipsec_offload()
627+
{
628+
ret=0
629+
algo="aead rfc4106(gcm(aes)) 0x3132333435363738393031323334353664636261 128"
630+
srcip=192.168.123.3
631+
dstip=192.168.123.4
632+
dev=simx1
633+
sysfsd=/sys/kernel/debug/netdevsim/$dev
634+
sysfsf=$sysfsd/ipsec
635+
636+
# setup netdevsim since dummydev doesn't have offload support
637+
modprobe netdevsim
638+
check_err $?
639+
if [ $ret -ne 0 ]; then
640+
echo "FAIL: ipsec_offload can't load netdevsim"
641+
return 1
642+
fi
643+
644+
ip link add $dev type netdevsim
645+
ip addr add $srcip dev $dev
646+
ip link set $dev up
647+
if [ ! -d $sysfsd ] ; then
648+
echo "FAIL: ipsec_offload can't create device $dev"
649+
return 1
650+
fi
651+
if [ ! -f $sysfsf ] ; then
652+
echo "FAIL: ipsec_offload netdevsim doesn't support IPsec offload"
653+
return 1
654+
fi
655+
656+
# flush to be sure there's nothing configured
657+
ip x s flush ; ip x p flush
658+
659+
# create offloaded SAs, both in and out
660+
ip x p add dir out src $srcip/24 dst $dstip/24 \
661+
tmpl proto esp src $srcip dst $dstip spi 9 \
662+
mode transport reqid 42
663+
check_err $?
664+
ip x p add dir out src $dstip/24 dst $srcip/24 \
665+
tmpl proto esp src $dstip dst $srcip spi 9 \
666+
mode transport reqid 42
667+
check_err $?
668+
669+
ip x s add proto esp src $srcip dst $dstip spi 9 \
670+
mode transport reqid 42 $algo sel src $srcip/24 dst $dstip/24 \
671+
offload dev $dev dir out
672+
check_err $?
673+
ip x s add proto esp src $dstip dst $srcip spi 9 \
674+
mode transport reqid 42 $algo sel src $dstip/24 dst $srcip/24 \
675+
offload dev $dev dir in
676+
check_err $?
677+
if [ $ret -ne 0 ]; then
678+
echo "FAIL: ipsec_offload can't create SA"
679+
return 1
680+
fi
681+
682+
# does offload show up in ip output
683+
lines=`ip x s list | grep -c "crypto offload parameters: dev $dev dir"`
684+
if [ $lines -ne 2 ] ; then
685+
echo "FAIL: ipsec_offload SA offload missing from list output"
686+
check_err 1
687+
fi
688+
689+
# use ping to exercise the Tx path
690+
ping -I $dev -c 3 -W 1 -i 0 $dstip >/dev/null
691+
692+
# does driver have correct offload info
693+
diff $sysfsf - << EOF
694+
SA count=2 tx=3
695+
sa[0] tx ipaddr=0x00000000 00000000 00000000 00000000
696+
sa[0] spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1
697+
sa[0] key=0x34333231 38373635 32313039 36353433
698+
sa[1] rx ipaddr=0x00000000 00000000 00000000 037ba8c0
699+
sa[1] spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1
700+
sa[1] key=0x34333231 38373635 32313039 36353433
701+
EOF
702+
if [ $? -ne 0 ] ; then
703+
echo "FAIL: ipsec_offload incorrect driver data"
704+
check_err 1
705+
fi
706+
707+
# does offload get removed from driver
708+
ip x s flush
709+
ip x p flush
710+
lines=`grep -c "SA count=0" $sysfsf`
711+
if [ $lines -ne 1 ] ; then
712+
echo "FAIL: ipsec_offload SA not removed from driver"
713+
check_err 1
714+
fi
715+
716+
# clean up any leftovers
717+
ip link del $dev
718+
rmmod netdevsim
719+
720+
if [ $ret -ne 0 ]; then
721+
echo "FAIL: ipsec_offload"
722+
return 1
723+
fi
724+
echo "PASS: ipsec_offload"
725+
}
726+
614727
kci_test_gretap()
615728
{
616729
testns="testns"
@@ -865,6 +978,7 @@ kci_test_rtnl()
865978
kci_test_encap
866979
kci_test_macsec
867980
kci_test_ipsec
981+
kci_test_ipsec_offload
868982

869983
kci_del_dummy
870984
}

0 commit comments

Comments
 (0)