1#! /bin/bash 2# SPDX-License-Identifier: BSD-3-Clause 3 4#check ETH_DEV 5if [[ -z "${ETH_DEV}" ]]; then 6 echo "ETH_DEV is invalid" 7 exit 127 8fi 9#check that REMOTE_HOST is reachable 10ssh ${REMOTE_HOST} echo 11st=$? 12if [[ $st -ne 0 ]]; then 13 echo "host ${REMOTE_HOST} is not reachable" 14 exit $st 15fi 16 17#get ether addr of REMOTE_HOST 18REMOTE_MAC=`ssh ${REMOTE_HOST} ip addr show dev ${REMOTE_IFACE}` 19st=$? 20REMOTE_MAC=`echo ${REMOTE_MAC} | sed -e 's/^.*ether //' -e 's/ brd.*$//'` 21if [[ $st -ne 0 || -z "${REMOTE_MAC}" ]]; then 22 echo "coouldn't retrieve ether addr from ${REMOTE_IFACE}" 23 exit 127 24fi 25 26LOCAL_IFACE=dtap0 27 28LOCAL_MAC="00:64:74:61:70:30" 29 30REMOTE_IPV4=192.168.31.14 31LOCAL_IPV4=192.168.31.92 32 33REMOTE_IPV6=fd12:3456:789a:0031:0000:0000:0000:0014 34LOCAL_IPV6=fd12:3456:789a:0031:0000:0000:0000:0092 35 36DPDK_PATH=${RTE_SDK:-${PWD}} 37DPDK_BUILD=${RTE_TARGET:-x86_64-native-linux-gcc} 38 39# by default ipsec-secgw can't deal with multi-segment packets 40# make sure our local/remote host wouldn't generate fragmented packets 41# if reassmebly option is not enabled 42DEF_MTU_LEN=1400 43DEF_PING_LEN=1200 44 45#upsate operation mode based on env vars values 46select_mode() 47{ 48 # select sync/async mode 49 if [[ -n "${CRYPTO_PRIM_TYPE}" && -n "${SGW_CMD_XPRM}" ]]; then 50 echo "${CRYPTO_PRIM_TYPE} is enabled" 51 SGW_CFG_XPRM="${SGW_CFG_XPRM} ${CRYPTO_PRIM_TYPE}" 52 fi 53 54 #make linux to generate fragmented packets 55 if [[ -n "${MULTI_SEG_TEST}" && -n "${SGW_CMD_XPRM}" ]]; then 56 echo "multi-segment test is enabled" 57 SGW_CMD_XPRM="${SGW_CMD_XPRM} ${MULTI_SEG_TEST}" 58 PING_LEN=5000 59 MTU_LEN=1500 60 else 61 PING_LEN=${DEF_PING_LEN} 62 MTU_LEN=${DEF_MTU_LEN} 63 fi 64} 65 66#setup mtu on local iface 67set_local_mtu() 68{ 69 mtu=$1 70 ifconfig ${LOCAL_IFACE} mtu ${mtu} 71 sysctl -w net.ipv6.conf.${LOCAL_IFACE}.mtu=${mtu} 72} 73 74# configure local host/ifaces 75config_local_iface() 76{ 77 ifconfig ${LOCAL_IFACE} ${LOCAL_IPV4}/24 up 78 ifconfig ${LOCAL_IFACE} 79 80 ip neigh flush dev ${LOCAL_IFACE} 81 ip neigh add ${REMOTE_IPV4} dev ${LOCAL_IFACE} lladdr ${REMOTE_MAC} 82 ip neigh show dev ${LOCAL_IFACE} 83} 84 85config6_local_iface() 86{ 87 config_local_iface 88 89 sysctl -w net.ipv6.conf.${LOCAL_IFACE}.disable_ipv6=0 90 ip addr add ${LOCAL_IPV6}/64 dev ${LOCAL_IFACE} 91 92 ip -6 neigh add ${REMOTE_IPV6} dev ${LOCAL_IFACE} lladdr ${REMOTE_MAC} 93 ip neigh show dev ${LOCAL_IFACE} 94} 95 96#configure remote host/iface 97config_remote_iface() 98{ 99 ssh ${REMOTE_HOST} ifconfig ${REMOTE_IFACE} down 100 ssh ${REMOTE_HOST} ifconfig ${REMOTE_IFACE} ${REMOTE_IPV4}/24 up 101 ssh ${REMOTE_HOST} ifconfig ${REMOTE_IFACE} 102 103 ssh ${REMOTE_HOST} ip neigh flush dev ${REMOTE_IFACE} 104 105 # by some reason following ip neigh doesn't work for me here properly: 106 #ssh ${REMOTE_HOST} ip neigh add ${LOCAL_IPV4} \ 107 # dev ${REMOTE_IFACE} lladr ${LOCAL_MAC} 108 # so used arp instead. 109 ssh ${REMOTE_HOST} arp -i ${REMOTE_IFACE} -s ${LOCAL_IPV4} ${LOCAL_MAC} 110 ssh ${REMOTE_HOST} ip neigh show dev ${REMOTE_IFACE} 111 112 ssh ${REMOTE_HOST} iptables --flush 113} 114 115config6_remote_iface() 116{ 117 config_remote_iface 118 119 ssh ${REMOTE_HOST} sysctl -w \ 120 net.ipv6.conf.${REMOTE_IFACE}.disable_ipv6=0 121 ssh ${REMOTE_HOST} ip addr add ${REMOTE_IPV6}/64 dev ${REMOTE_IFACE} 122 123 ssh ${REMOTE_HOST} ip -6 neigh add ${LOCAL_IPV6} \ 124 dev ${REMOTE_IFACE} lladdr ${LOCAL_MAC} 125 ssh ${REMOTE_HOST} ip neigh show dev ${REMOTE_IFACE} 126 127 ssh ${REMOTE_HOST} ip6tables --flush 128} 129 130#configure remote and local host/iface 131config_iface() 132{ 133 config_local_iface 134 config_remote_iface 135} 136 137config6_iface() 138{ 139 config6_local_iface 140 config6_remote_iface 141} 142 143# secgw application parameters setup 144SGW_PORT_CFG="--vdev=\"net_tap0,mac=fixed\" ${ETH_DEV}" 145SGW_WAIT_DEV="${LOCAL_IFACE}" 146. ${DIR}/common_defs_secgw.sh 147