2_node_topo.sh revision 25531ee0
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
19function 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
42function 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
66function 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}
160