Update adjacency tests
[one.git] / tests / data_plane / vpp_lite_topo / topologies / 2_node_topo.sh
1
2 #
3 #                                +--------+
4 #                                |        |
5 #                                |   MR   |
6 #                                |        |
7 #                                +--------+
8 #                                     |6.0.3.100
9 #6:0:1::2                             |6:0:3::100
10 #6.0.1.2     vpp1 +--------+          |         +--------+
11 #       +---------+        |intervpp1 |intervpp2|        |vpp2
12 #                 |  VPP1  +----------+---------+  VPP2  +---------+
13 #                 |        |                    |        |      6.0.2.2
14 #                 +--------+                    +--------+      6:0:2::2
15 #
16
17 function set_arp
18 {
19   mac=`ip netns exec vppns1 ip a show dev veth_vpp1  | grep "link/ether" | awk '{print $2}'`
20   echo "set ip arp host-vpp1 6.0.1.2 $mac" | nc 0 5002
21   echo "set ip6 neighbor host-vpp1 6:0:1::2 $mac" | nc 0 5002
22
23   mac=`ip netns exec vppns2 ip a show dev veth_vpp2  | grep "link/ether" | awk '{print $2}'`
24   echo "set ip arp host-vpp2 6.0.2.2 $mac" | nc 0 5003
25   echo "set ip6 neighbor host-vpp2 6:0:2::2 $mac" | nc 0 5003
26
27   mac=`echo "sh hard host-intervpp1" | nc 0 5002 | grep 'Ethernet address' | awk '{print $3}'`
28   echo "set ip arp host-intervpp2 6.0.3.1 $mac" | nc 0 5003
29   echo "set ip6 neighbor host-intervpp2 6:0:3::1 $mac" | nc 0 5003
30
31   mac=`echo "sh hard host-intervpp2" | nc 0 5003 | grep 'Ethernet address' | awk '{print $3}'`
32   echo "set ip arp host-intervpp1 6.0.3.2 $mac" | nc 0 5002
33   echo "set ip6 neighbor host-intervpp1 6:0:3::2 $mac" | nc 0 5002
34 }
35
36 function 2_node_topo_clean
37 {
38   echo "Clearing all VPP instances.."
39   pkill vpp --signal 9
40   rm /dev/shm/*
41
42   echo "Cleaning topology.."
43   ip netns exec intervppns ifconfig vppbr down
44   ip netns exec intervppns brctl delbr vppbr
45   ip link del dev veth_vpp1 &> /dev/null
46   ip link del dev veth_vpp2 &> /dev/null
47   ip link del dev veth_intervpp1 &> /dev/null
48   ip link del dev veth_intervpp2 &> /dev/null
49   ip link del dev veth_odl &> /dev/null
50   ip netns del vppns1 &> /dev/null
51   ip netns del vppns2 &> /dev/null
52   ip netns del intervppns &> /dev/null
53
54   if [ "$1" != "no_odl" ] ; then
55     odl_clear_all
56   fi
57 }
58
59 function 2_node_topo_setup
60 {
61
62   # create vpp to clients and inter-vpp namespaces
63   ip netns add vppns1
64   ip netns add vppns2
65   ip netns add intervppns
66
67   # create vpp and odl interfaces and set them in intervppns
68   ip link add veth_intervpp1 type veth peer name intervpp1
69   ip link add veth_intervpp2 type veth peer name intervpp2
70   ip link add veth_odl type veth peer name odl
71   ip link set dev intervpp1 up
72   ip link set dev intervpp2 up
73   ip link set dev odl up
74   ip link set dev veth_intervpp1 up netns intervppns
75   ip link set dev veth_intervpp2 up netns intervppns
76   ip link set dev veth_odl up netns intervppns
77
78   # create bridge in intervppns and add vpp and odl interfaces
79   ip netns exec intervppns brctl addbr vppbr
80   ip netns exec intervppns brctl addif vppbr veth_intervpp1
81   ip netns exec intervppns brctl addif vppbr veth_intervpp2
82   ip netns exec intervppns brctl addif vppbr veth_odl
83   ip netns exec intervppns ifconfig vppbr up
84
85   # create and configure 1st veth client to vpp pair
86   ip link add veth_vpp1 type veth peer name vpp1
87   ip link set dev vpp1 up
88   ip link set dev veth_vpp1 up netns vppns1
89
90   # create and configure 2nd veth client to vpp pair
91   ip link add veth_vpp2 type veth peer name vpp2
92   ip link set dev vpp2 up
93   ip link set dev veth_vpp2 up netns vppns2
94
95   ip netns exec vppns1 \
96   bash -c "
97     ip link set dev lo up
98     ip addr add 6.0.1.2/24 dev veth_vpp1
99     ip route add 6.0.2.0/24 via 6.0.1.1
100     ip addr add 6:0:1::2/64 dev veth_vpp1
101     ip route add 6:0:2::0/64 via 6:0:1::1
102   "
103
104   ip netns exec vppns2 \
105   bash -c "
106     ip link set dev lo up
107     ip addr add 6.0.2.2/24 dev veth_vpp2
108     ip route add 6.0.1.0/24 via 6.0.2.1
109     ip addr add 6:0:2::2/64 dev veth_vpp2
110     ip route add 6:0:1::0/64 via 6:0:2::1
111   "
112
113   # set odl iface ip and disable checksum offloading
114   ip addr add 6.0.3.100/24 dev odl
115   ip addr add 6:0:3::100/64 dev odl
116   ethtool --offload  odl rx off tx off
117
118   # generate config files
119   ./scripts/generate_config.py ${VPP_LITE_CONF} ${CFG_METHOD}
120
121   start_vpp 5002 vpp1
122   start_vpp 5003 vpp2
123
124   sleep 2
125   echo "* Selected configuration method: $CFG_METHOD"
126   if [ "$CFG_METHOD" == "cli" ] ; then
127     echo "exec ${VPP_LITE_CONF}/vpp1.cli" | nc 0 5002
128     echo "exec ${VPP_LITE_CONF}/vpp2.cli" | nc 0 5003
129   elif [ "$CFG_METHOD" == "vat" ] ; then
130     ${VPP_API_TEST} chroot prefix vpp1 script in ${VPP_LITE_CONF}/vpp1.vat
131     ${VPP_API_TEST} chroot prefix vpp2 script in ${VPP_LITE_CONF}/vpp2.vat
132   else
133     echo "=== WARNING:"
134     echo "=== Invalid configuration method selected!"
135     echo "=== To resolve this set env variable CFG_METHOD to vat or cli."
136     echo "==="
137   fi
138
139   if [ "$1" != "no_odl" ] ; then
140     post_curl "add-mapping" ${ODL_CONFIG_FILE1}
141     post_curl "add-mapping" ${ODL_CONFIG_FILE2}
142   fi
143
144   set_arp
145 }