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