summaryrefslogtreecommitdiffstats
path: root/tests/data_plane/vpp_lite_topo/topologies/multihoming_topo_l2.sh
blob: 07a85b35c181b12f09e3a95e00a23bb1b557abd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/env bash

function multihoming_topo_clean
{
  echo "Clearing all VPP instances.."
  pkill vpp --signal 9
  rm /dev/shm/*

  echo "Cleaning topology.."
  ip netns exec intervppns1 ifconfig vppbr down
  ip netns exec intervppns1 brctl delbr vppbr
  ip link del dev veth_vpp1 &> /dev/null
  ip link del dev veth_vpp2 &> /dev/null
  ip link del dev veth_intervpp11 &> /dev/null
  ip link del dev veth_intervpp12 &> /dev/null
  ip link del dev veth_odl &> /dev/null
  ip netns del vppns1 &> /dev/null
  ip netns del vppns2 &> /dev/null
  ip netns del intervppns1 &> /dev/null

  ip netns exec intervppns2 ifconfig vppbr down
  ip netns exec intervppns2 brctl delbr vppbr
  ip link del dev veth_intervpp21 &> /dev/null
  ip link del dev veth_intervpp22 &> /dev/null
  ip netns del intervppns2 &> /dev/null

  if [ "$1" != "no_odl" ] ; then
    odl_clear_all
  fi
}

function set_arp
{
  mac1=`ip netns exec vppns1 ip a show dev veth_vpp1  | grep "link/ether" | awk '{print $2}'`
  ip netns exec vppns2 arp -s 6.0.1.11 $mac1

  mac2=`ip netns exec vppns2 ip a show dev veth_vpp2  | grep "link/ether" | awk '{print $2}'`
  ip netns exec vppns1 arp -s 6.0.1.12 $mac2
}

function multihoming_topo_setup
{

  # create vpp to clients and inter-vpp namespaces
  ip netns add vppns1
  ip netns add vppns2
  ip netns add intervppns1
  ip netns add intervppns2

  # create vpp and odl interfaces and set them in intervppns1
  ip link add veth_intervpp11 type veth peer name intervpp11
  ip link add veth_intervpp12 type veth peer name intervpp12
  ip link add veth_odl type veth peer name odl
  ip link set dev intervpp11 up
  ip link set dev intervpp12 up
  ip link set dev odl up
  ip link set dev veth_intervpp11 up netns intervppns1
  ip link set dev veth_intervpp12 up netns intervppns1
  ip link set dev veth_odl up netns intervppns1

  ip link add veth_intervpp21 type veth peer name intervpp21
  ip link add veth_intervpp22 type veth peer name intervpp22
  ip link set dev intervpp21 up
  ip link set dev intervpp22 up
  ip link set dev veth_intervpp21 up netns intervppns2
  ip link set dev veth_intervpp22 up netns intervppns2

  # create bridge in intervppns1 and add vpp and odl interfaces
  ip netns exec intervppns1 brctl addbr vppbr
  ip netns exec intervppns1 brctl addif vppbr veth_intervpp11
  ip netns exec intervppns1 brctl addif vppbr veth_intervpp12
  ip netns exec intervppns1 brctl addif vppbr veth_odl
  ip netns exec intervppns1 ifconfig vppbr up

  # create bridge in intervppns2 and add vpp and odl interfaces
  ip netns exec intervppns2 brctl addbr vppbr
  ip netns exec intervppns2 brctl addif vppbr veth_intervpp21
  ip netns exec intervppns2 brctl addif vppbr veth_intervpp22
  ip netns exec intervppns2 brctl addif vppbr veth_odl
  ip netns exec intervppns2 ifconfig vppbr up

  # create and configure 1st veth client to vpp pair
  ip link add veth_vpp1 type veth peer name vpp1
  ip link set dev vpp1 up
  ip link set dev veth_vpp1 address 08:11:11:11:11:11
  ip link set dev veth_vpp1 up netns vppns1

  # create and configure 2nd veth client to vpp pair
  ip link add veth_vpp2 type veth peer name vpp2
  ip link set dev vpp2 up
  ip link set dev veth_vpp2 address 08:22:22:22:22:22
  ip link set dev veth_vpp2 up netns vppns2

  ip netns exec vppns1 \
  bash -c "
    ip link set dev lo up
    ip addr add 6.0.1.11/24 dev veth_vpp1
    ip addr add 6:0:1::11/64 dev veth_vpp1
  "

  ip netns exec vppns2 \
  bash -c "
    ip link set dev lo up
    ip addr add 6.0.1.12/24 dev veth_vpp2
    ip addr add 6:0:1::12/64 dev veth_vpp2
  "

  # set odl iface ip and disable checksum offloading
  ip addr add 6.0.3.100/24 dev odl
  ip addr add 6:0:3::100/64 dev odl
  ethtool --offload  odl rx off tx off

  # generate config files
  ./scripts/generate_config.py ${VPP_LITE_CONF} ${CFG_METHOD}

  start_vpp 5002 vpp1
  start_vpp 5003 vpp2

  echo "* Selected configuration method: $CFG_METHOD"
  sleep 2
  if [ "$CFG_METHOD" == "cli" ] ; then
    echo "exec ${VPP_LITE_CONF}/vpp1.cli" | nc 0 5002
    echo "exec ${VPP_LITE_CONF}/vpp2.cli" | nc 0 5003
  elif [ "$CFG_METHOD" == "vat" ] ; then
    ${VPP_API_TEST} chroot prefix vpp1 script in ${VPP_LITE_CONF}/vpp1.vat
    ${VPP_API_TEST} chroot prefix vpp2 script in ${VPP_LITE_CONF}/vpp2.vat
  else
    echo "=== WARNING:"
    echo "=== Invalid configuration method selected!"
    echo "=== To resolve this set env variable CFG_METHOD to vat or cli."
    echo "==="
  fi

  if [ "$1" != "no_odl" ] ; then
    post_curl "add-mapping" ${ODL_CONFIG_FILE1}
    post_curl "add-mapping" ${ODL_CONFIG_FILE2}
  fi

  set_arp
}