| if [ -f ~/.vpp_sswan ]; then |
| . ~/.vpp_sswan |
| fi |
| |
| STARTUP_DIR="`pwd`" |
| SSWAN_CFG_DIR=/tmp/sswan |
| |
| start_vpp() { |
| sudo $VPP_BIN unix { \ |
| cli-listen /tmp/vpp_sswan.sock \ |
| gid $(id -g) } \ |
| api-segment { prefix vpp } \ |
| plugins { plugin dpdk_plugin.so { disable } } |
| } |
| |
| vppctl () { |
| sudo $VPPCTL -s /tmp/vpp_sswan.sock $@ |
| } |
| |
| initiator_conf() { |
| sudo rm -r $SSWAN_CFG_DIR |
| sudo mkdir -p $SSWAN_CFG_DIR |
| sudo cp configs/$TC_DIR/ipsec.conf $SSWAN_CFG_DIR/ipsec.conf |
| sudo cp configs/$TC_DIR/ipsec.secrets $SSWAN_CFG_DIR/ipsec.secrets |
| sudo cp configs/strongswan.conf $SSWAN_CFG_DIR/strongswan.conf |
| } |
| |
| config_topo () { |
| (sudo ip link add vpp type veth peer name swanif |
| sudo ip link set dev vpp up |
| |
| sudo ip netns add ns |
| sudo ip link add veth_priv type veth peer name priv |
| sudo ip link set dev priv up |
| sudo ip link set dev veth_priv up netns ns |
| |
| sudo ip netns exec ns \ |
| bash -c " |
| ip link set dev lo up |
| ip addr add 192.168.3.2/24 dev veth_priv |
| ip addr add fec3::2/16 dev veth_priv |
| ip route add 192.168.5.0/24 via 192.168.3.1 |
| ip route add fec5::0/16 via fec3::1 |
| ") &> /dev/null |
| |
| initiator_conf |
| (docker run --name sswan -d --privileged --rm --net=none \ |
| -v $SSWAN_CFG_DIR:/conf -v $SSWAN_CFG_DIR:/etc/ipsec.d philplckthun/strongswan) |
| |
| pid=$(docker inspect --format "{{.State.Pid}}" sswan) |
| sudo ip link set netns $pid dev swanif |
| |
| sudo nsenter -t $pid -n ip addr add 192.168.10.1/24 dev swanif |
| sudo nsenter -t $pid -n ip link set dev swanif up |
| |
| sudo nsenter -t $pid -n ip addr add 192.168.5.2/32 dev lo |
| sudo nsenter -t $pid -n ip link set dev lo up |
| |
| start_vpp |
| echo "vpp started.." |
| sleep 3 |
| |
| echo "exec $STARTUP_DIR/configs/$TC_DIR/vpp.conf" |
| vppctl exec $STARTUP_DIR/configs/$TC_DIR/vpp.conf |
| sleep 3 |
| } |
| |
| initiate_from_sswan () { |
| echo "start initiation.." |
| sudo docker exec sswan ipsec up initiator |
| sleep 1 |
| } |
| |
| test_ping() { |
| sudo ip netns exec ns ping -c 1 192.168.5.2 |
| rc=$? |
| if [ $rc -ne 0 ] ; then |
| echo "Test failed!" |
| else |
| echo "Test passed." |
| fi |
| return $rc |
| } |
| |
| unconf_topo () { |
| docker stop sswan &> /dev/null |
| sudo pkill vpp |
| sudo ip netns delete ns |
| sleep 2 |
| } |
| |
| initiate_from_vpp () { |
| vppctl ikev2 initiate sa-init pr1 |
| sleep 2 |
| } |
| |
| #vpp as an responder |
| run_responder_test() { |
| config_topo |
| initiate_from_sswan |
| test_ping |
| rc=$? |
| unconf_topo |
| return ${rc} |
| } |
| |
| # vpp as an initiator |
| run_initiator_test() { |
| config_topo |
| initiate_from_vpp |
| test_ping |
| rc=$? |
| unconf_topo |
| return ${rc} |
| } |