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