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