From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hangbin Liu Date: Wed, 27 Apr 2016 20:54:35 +0800 Subject: [LTP] [PATCH v8 2/3] network/stress: add ipsec lib In-Reply-To: <1461761676-28599-1-git-send-email-haliu@redhat.com> References: <1461761676-28599-1-git-send-email-haliu@redhat.com> Message-ID: <1461761676-28599-3-git-send-email-haliu@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it Signed-off-by: Hangbin Liu --- testcases/network/stress/ipsec/Makefile | 28 +++++++ testcases/network/stress/ipsec/ipsec_lib.sh | 110 ++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 testcases/network/stress/ipsec/Makefile create mode 100644 testcases/network/stress/ipsec/ipsec_lib.sh diff --git a/testcases/network/stress/ipsec/Makefile b/testcases/network/stress/ipsec/Makefile new file mode 100644 index 0000000..43352cc --- /dev/null +++ b/testcases/network/stress/ipsec/Makefile @@ -0,0 +1,28 @@ +#!/bin/sh +# Copyright (c) 2016 Red Hat Inc., All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# Author: Hangbin Liu +# +####################################################################### + + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/env_pre.mk + +INSTALL_TARGETS := *.sh + +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/network/stress/ipsec/ipsec_lib.sh b/testcases/network/stress/ipsec/ipsec_lib.sh new file mode 100644 index 0000000..434f5c9 --- /dev/null +++ b/testcases/network/stress/ipsec/ipsec_lib.sh @@ -0,0 +1,110 @@ +#!/bin/sh +# Copyright (c) 2016 Red Hat Inc., All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# Author: Hangbin Liu +# +####################################################################### + +. test_net.sh + +# tst_ipsec_cleanup: flush ipsec state and policy rules +tst_ipsec_cleanup() +{ + ROD ip xfrm state flush + ROD ip xfrm policy flush + tst_rhost_run -s -c "ip xfrm state flush && ip xfrm policy flush" +} + +# tst_ipsec target protocol mode spi src_addr dst_addr: config ipsec with +# supplied protocol and mode. +# +# target: target of the configuration host ( lhost / rhost ) +# protocol: ah / esp / ipcomp +# mode: transport / tunnel +# spi: the first spi value +# src_addr: source IP address +# dst_addr: destination IP address +tst_ipsec() +{ + if [ $# -ne 6 ]; then + tst_brkm TCONF "tst_ipsec parameter mismatch" + fi + tst_check_cmds hexdump + + local target=$1 + local protocol=$2 + local mode=$3 + local spi=$4 + local src=$5 + local dst=$6 + + # Encryption algorithm + local EALGO="des3_ede" + local EALGO_KEY=0x$(printf _I_want_to_have_chicken_ | hexdump -ve '/1 "%x"') + + # Authentication algorithm + local AALGO="sha1" + local AALGO_KEY=0x$(printf beef_fish_pork_salad | hexdump -ve '/1 "%x"') + + # Compression algorithm + local CALGO="deflate" + # Algorithm options for each protocol + local algo_line= + local proto= + case $protocol in + ah) + algo_line="auth $AALGO $AALGO_KEY" + proto="ah" + ;; + esp) + algo_line="enc $EALGO $EALGO_KEY auth $AALGO $AALGO_KEY" + proto="esp" + ;; + ipcomp) + algo_line="comp $CALGO" + proto="comp" + ;; + *) + tst_brkm TCONF "tst_ipsec protocol mismatch" + ;; + esac + + if [ $target = lhost ]; then + local spi_1="0x$spi" + local spi_2="0x$(( $spi + 1 ))" + ROD ip xfrm state add src $src dst $dst spi $spi_1 proto $proto \ + $algo_line mode $mode sel src $src dst $dst + ROD ip xfrm state add src $dst dst $src spi $spi_2 proto $proto \ + $algo_line mode $mode sel src $dst dst $src + + ROD ip xfrm policy add src $src dst $dst dir out tmpl src $src \ + dst $dst proto $proto mode $mode + ROD ip xfrm policy add src $dst dst $src dir in tmpl src $dst \ + dst $src proto $proto mode $mode level use + elif [ $target = rhost ]; then + local spi_1="0x$(( $spi + 1 ))" + local spi_2="0x$spi" + tst_rhost_run -s -c "ip xfrm state add src $src dst $dst spi $spi_1 \ + proto $proto $algo_line mode $mode sel src $src dst $dst" + tst_rhost_run -s -c "ip xfrm state add src $dst dst $src spi $spi_2 \ + proto $proto $algo_line mode $mode sel src $dst dst $src" + + tst_rhost_run -s -c "ip xfrm policy add src $src dst $dst dir out \ + tmpl src $src dst $dst proto $proto mode $mode" + tst_rhost_run -s -c "ip xfrm policy add src $dst dst $src dir in \ + tmpl src $dst dst $src proto $proto mode $mode level use" + fi +} -- 2.5.5