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