82dc734e8d32aa02d876a5cde8c5664448a0080f
[one.git] / tests / data_plane / vpp_lite_topo / topologies / 3_node_star.sh
1 #!/usr/bin/env bash
2
3 #                                 +--------+
4 #                                 |        |
5 #               6.0.10.25         |   MR   |
6 #            08:55:55:55:55:55    |        |
7 #                    +            +--------+
8 #                    |                 |6.0.3.100
9 # 6:0:1::2           |vpp8             |6:0:3::100
10 # 6.0.1.2     vpp1 +-+------+          |         +--------+
11 #        +---------+        |xtr1      |    xtr2 |        |vpp2
12 #                  |  VPP1  +----------+---------+  VPP2  +---------+
13 #        +---------+        |          |         |        |      6.0.2.2
14 # 6.0.5.5     vpp3 +-+------+          |         +-----+--+      6:0:2::2
15 # 6:0:5::5           |vpp5             |xtr3           |vpp7
16 #                    |             +--------+          |
17 #                    +             |        |          + 6.0.10.22
18 #                6.0.10.21         |  VPP3  |             08:22:22:22:22:22
19 #            08:11:11:11:11:11     |        |
20 #                                  +-+----+-+
21 #                                vpp6|    |vpp4
22 #                                    |    |
23 #                                    |    +6.0.2.2
24 #                                    +     6:0:2::2
25 #                             6.0.10.22
26 #                             08:22:22:22:22:22
27 #
28
29
30 function 3_node_star_topo_clean
31 {
32   echo "Clearing all VPP instances.."
33   pkill vpp --signal 9
34
35   rm /dev/shm/*
36
37   echo "Cleaning 3 node star topology..."
38   ip netns exec xtr-ns ifconfig vppbr1 down
39   ip netns exec xtr-ns brctl delbr vppbr1
40   ip link del dev vpp1 &> /dev/null
41   ip link del dev vpp2 &> /dev/null
42   ip link del dev vpp3 &> /dev/null
43   ip link del dev vpp4 &> /dev/null
44   ip link del dev vpp5 &> /dev/null
45   ip link del dev vpp6 &> /dev/null
46   ip link del dev vpp7 &> /dev/null
47   ip link del dev vpp8 &> /dev/null
48   ip link del dev xtr1 &> /dev/null
49   ip link del dev xtr2 &> /dev/null
50   ip link del dev xtr3 &> /dev/null
51   ip link del dev odl &> /dev/null
52
53   ip netns del vpp-ns1 &> /dev/null
54   ip netns del vpp-ns2 &> /dev/null
55   ip netns del vpp-ns3 &> /dev/null
56   ip netns del vpp-ns4 &> /dev/null
57   ip netns del vpp-ns5 &> /dev/null
58   ip netns del vpp-ns6 &> /dev/null
59   ip netns del vpp-ns7 &> /dev/null
60   ip netns del vpp-ns8 &> /dev/null
61   ip netns del xtr-ns &> /dev/null
62
63   odl_clear_all
64 }
65
66 function set_arp
67 {
68   odl_mac=`ip a show dev odl | grep "link/ether" | awk '{print $2}'`
69   echo "set ip arp host-xtr1 6.0.3.100 $odl_mac" | nc 0 5002
70   echo "set ip arp host-xtr2 6.0.3.100 $odl_mac" | nc 0 5003
71   echo "set ip arp host-xtr3 6.0.3.100 $odl_mac" | nc 0 5004
72
73   mac1=`ip netns exec vpp-ns5 ip a show dev veth_vpp5  | grep "link/ether" | awk '{print $2}'`
74   ip netns exec vpp-ns6 arp -s 6.0.10.21 $mac1
75
76   mac2=`ip netns exec vpp-ns8 ip a show dev veth_vpp8  | grep "link/ether" | awk '{print $2}'`
77   ip netns exec vpp-ns7 arp -s 6.0.10.25 $mac2
78
79   mac3=`ip netns exec vpp-ns7 ip a show dev veth_vpp7  | grep "link/ether" | awk '{print $2}'`
80   ip netns exec vpp-ns5 arp -s 6.0.10.22 $mac3
81   ip netns exec vpp-ns8 arp -s 6.0.10.22 $mac3
82 }
83
84 function 3_node_star_topo_setup
85 {
86   ip netns add vpp-ns1
87   ip netns add vpp-ns2
88   ip netns add vpp-ns3
89   ip netns add vpp-ns4
90   ip netns add vpp-ns5
91   ip netns add vpp-ns6
92   ip netns add vpp-ns7
93   ip netns add vpp-ns8
94   ip netns add xtr-ns
95
96   ip link add veth_xtr1 type veth peer name xtr1
97   ip link add veth_xtr2 type veth peer name xtr2
98   ip link add veth_xtr3 type veth peer name xtr3
99   ip link add veth_odl type veth peer name odl
100   ip link set dev xtr1 up
101   ip link set dev xtr2 up
102   ip link set dev xtr3 up
103   ip link set dev odl up
104
105   ip link set dev veth_xtr1 up netns xtr-ns
106   ip link set dev veth_xtr2 up netns xtr-ns
107   ip link set dev veth_xtr3 up netns xtr-ns
108   ip link set dev veth_odl up netns xtr-ns
109
110   ip netns exec xtr-ns brctl addbr vppbr1
111   ip netns exec xtr-ns brctl addif vppbr1 veth_xtr1
112   ip netns exec xtr-ns brctl addif vppbr1 veth_xtr2
113   ip netns exec xtr-ns brctl addif vppbr1 veth_xtr3
114   ip netns exec xtr-ns brctl addif vppbr1 veth_odl
115   ip netns exec xtr-ns ifconfig vppbr1 up
116
117   ip link add veth_vpp1 type veth peer name vpp1
118   ip link set dev vpp1 up
119   ip link set dev veth_vpp1 up netns vpp-ns1
120
121   ip netns exec vpp-ns1 \
122     bash -c "
123       ip link set dev lo up
124       ip addr add 6.0.1.2/24 dev veth_vpp1
125       ip addr add 6:0:1::2/64 dev veth_vpp1
126       ip route add 6.0.2.0/24 via 6.0.1.1
127       ip route add 6:0:2::0/64 via 6:0:1::1
128   "
129
130   ip link add veth_vpp2 type veth peer name vpp2
131   ip link set dev vpp2 up
132   ip link set dev veth_vpp2 up netns vpp-ns2
133
134   ip netns exec vpp-ns2 \
135     bash -c "
136       ip link set dev lo up
137       ip addr add 6.0.2.2/24 dev veth_vpp2
138       ip addr add 6:0:2::2/64 dev veth_vpp2
139       ip route add 6.0.1.0/24 via 6.0.2.1
140       ip route add 6:0:1::0/64 via 6:0:2::1
141   "
142
143   ip link add veth_vpp3 type veth peer name vpp3
144   ip link set dev vpp3 up
145   ip link set dev veth_vpp3 up netns vpp-ns3
146
147   ip netns exec vpp-ns3 \
148     bash -c "
149       ip link set dev lo up
150       ip addr add 6.0.5.5/24 dev veth_vpp3
151       ip addr add 6:0:5::5/64 dev veth_vpp3
152       ip route add 6.0.2.0/24 via 6.0.5.1
153       ip route add 6:0:2::0/64 via 6:0:5::1
154   "
155
156   ip link add veth_vpp4 type veth peer name vpp4
157   ip link set dev vpp4 up
158   ip link set dev veth_vpp4 up netns vpp-ns4
159
160   ip netns exec vpp-ns4 \
161     bash -c "
162       ip link set dev lo up
163       ip addr add 6.0.2.2/24 dev veth_vpp4
164       ip addr add 6:0:2::2/64 dev veth_vpp4
165       ip route add 6.0.5.0/24 via 6.0.2.1
166       ip route add 6:0:5::0/64 via 6:0:2::1
167   "
168
169   ip link add veth_vpp5 type veth peer name vpp5
170   ip link set dev vpp5 up
171   ip link set dev veth_vpp5 address 08:11:11:11:11:11
172   ip link set dev veth_vpp5 up netns vpp-ns5
173
174   ip netns exec vpp-ns5 \
175     bash -c "
176       ip link set dev lo up
177       ip addr add 6.0.10.21/24 dev veth_vpp5
178   "
179
180   ip link add veth_vpp6 type veth peer name vpp6
181   ip link set dev vpp6 up
182   ip link set dev veth_vpp6 address 08:22:22:22:22:22
183   ip link set dev veth_vpp6 up netns vpp-ns6
184
185   ip netns exec vpp-ns6 \
186     bash -c "
187       ip link set dev lo up
188       ip addr add 6.0.10.22/24 dev veth_vpp6
189   "
190
191   ip link add veth_vpp7 type veth peer name vpp7
192   ip link set dev vpp7 up
193   ip link set dev veth_vpp7 address 08:22:22:22:22:22
194   ip link set dev veth_vpp7 up netns vpp-ns7
195
196   ip netns exec vpp-ns7 \
197     bash -c "
198       ip link set dev lo up
199       ip addr add 6.0.10.22/24 dev veth_vpp7
200   "
201
202   ip link add veth_vpp8 type veth peer name vpp8
203   ip link set dev vpp8 up
204   ip link set dev veth_vpp8 address 08:55:55:55:55:55
205   ip link set dev veth_vpp8 up netns vpp-ns8
206
207   ip netns exec vpp-ns8 \
208     bash -c "
209       ip link set dev lo up
210       ip addr add 6.0.10.25/24 dev veth_vpp8
211   "
212
213   ip addr add 6.0.3.100/24 dev odl
214   ip addr add 6:0:3::100/64 dev odl
215   ethtool --offload  odl rx off tx off
216 maybe_pause
217   # generate config files
218   ./scripts/generate_config.py ${VPP_LITE_CONF} ${CFG_METHOD}
219
220   start_vpp 5002 vpp1
221   start_vpp 5003 vpp2
222   start_vpp 5004 vpp3
223
224   echo "* Selected configuration method: $CFG_METHOD"
225   if [ "$CFG_METHOD" == "cli" ] ; then
226     echo "exec ${VPP_LITE_CONF}/vpp1.cli" | nc 0 5002
227     echo "exec ${VPP_LITE_CONF}/vpp2.cli" | nc 0 5003
228     echo "exec ${VPP_LITE_CONF}/vpp3.cli" | nc 0 5004
229   elif [ "$CFG_METHOD" == "vat" ] ; then
230     sleep 2
231     ${VPP_API_TEST} chroot prefix vpp1 script in ${VPP_LITE_CONF}/vpp1.vat
232     ${VPP_API_TEST} chroot prefix vpp2 script in ${VPP_LITE_CONF}/vpp2.vat
233     ${VPP_API_TEST} chroot prefix vpp3 script in ${VPP_LITE_CONF}/vpp3.vat
234   else
235     echo "=== WARNING:"
236     echo "=== Invalid configuration method selected!"
237     echo "=== To resolve this set env variable CFG_METHOD to vat or cli."
238     echo "==="
239   fi
240
241   post_curl "add-mapping" ${ODL_CONFIG_FILE1}
242   post_curl "add-mapping" ${ODL_CONFIG_FILE2}
243
244   set_arp
245 }