go.ligato.io/vpp-agent/v3@v3.5.0/k8s/tests/topology.sh (about) 1 #!/usr/bin/env bash 2 3 VSWITCH_NAME="vpp1" 4 RNG_NAME="rng-vpp" 5 USSCHED_NAME="ussched-vpp" 6 VNF_NAME="vnf-vpp" 7 ETCD_CONTAINER="etcd" 8 9 # sudo docker run -it --name vpp1 -e MICROSERVICE_LABEL=vpp1 -v/tmp/:/tmp/ --privileged --rm dev_vpp_agent bash 10 # sudo docker run -it --name rng -e MICROSERVICE_LABEL=rng-vpp -v/tmp/:/tmp/ --privileged --rm dev_vpp_agent 11 # sudo docker run -it --name ussched -e MICROSERVICE_LABEL=ussched-vpp -v/tmp/:/tmp/ --privileged --rm dev_vpp_agent 12 # sudo docker run -it --name vnf -e MICROSERVICE_LABEL=vnf-vpp -v/tmp/:/tmp/ --privileged --rm dev_vpp_agent 13 14 # VSWITCH - configure physical interface GigabitEthernet0/8/0 15 # !!! needs to exist and be whitelisted in VPP, e.g. dpdk { dev 0000:00:08.0 } !!! 16 # This works for my VirtualBox ethernet interface: 17 # modprobe igb_uio 18 # vpp unix { interactive } dpdk { dev 0000:00:08.0 uio-driver igb_uio } 19 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/GigabitEthernet0/8/0 ' 20 { 21 "name": "GigabitEthernet0/8/0", 22 "type": 1, 23 "enabled": true, 24 "mtu": 1500, 25 "ip_addresses": [ 26 "8.42.0.2/24" 27 ] 28 } 29 ' 30 31 # VSWITCH - create a loopback interface 32 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/loop1 ' 33 { 34 "name": "loop1", 35 "enabled": true, 36 "phys_address": "8a:f1:be:90:00:dd", 37 "mtu": 1500, 38 "ip_addresses": [ 39 "6.0.0.100/24" 40 ] 41 } 42 ' 43 44 # VSWITCH - create a vxlan interface 45 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/vxlan1 ' 46 { 47 "name": "vxlan1", 48 "type": 5, 49 "enabled": true, 50 "vxlan": { 51 "src_address": "8.42.0.2", 52 "dst_address": "8.42.0.1", 53 "vni": 13 54 } 55 } 56 ' 57 58 # VSWITCH - create a BVI loopback interface for B2 (extension to the cCMTS topology) 59 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/loop-bvi2 ' 60 { 61 "name": "loop-bvi2", 62 "enabled": true, 63 "mtu": 1500, 64 "ip_addresses": [ 65 "10.10.1.1/24" 66 ] 67 } 68 ' 69 70 # VSWITCH - add static route to 6.0.0.0/24 via GigabitEthernet0/8/0 71 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/vrf/0/fib/6.0.0.0/24/8.42.0.1 ' 72 { 73 "description": "Static route", 74 "dst_ip_addr": "6.0.0.0/24", 75 "next_hop_addr": "8.42.0.1", 76 "outgoing_interface": "GigabitEthernet0/8/0" 77 } 78 ' 79 80 # VSWITCH - create memif master to RNG (bridge domain B2) 81 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/memif-to-rng ' 82 { 83 "name": "memif-to-rng", 84 "type": 2, 85 "enabled": true, 86 "memif": { 87 "master": true, 88 "id": 1, 89 "socket_filename": "/tmp/memif.sock" 90 } 91 } 92 ' 93 94 # RNG - create memif slave to VSWITCH 95 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${RNG_NAME}/vpp/config/v1/interface/memif-to-vswitch ' 96 { 97 "name": "memif-to-vswitch", 98 "type": 2, 99 "enabled": true, 100 "mtu": 1500, 101 "memif": { 102 "master": false, 103 "id": 1, 104 "socket_filename": "/tmp/memif.sock" 105 }, 106 "ip_addresses": [ 107 "10.10.1.4/24" 108 ] 109 } 110 ' 111 112 113 # VSWITCH - create memif master to USSCHED (bridge domain B2) 114 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/memif-to-ussched ' 115 { 116 "name": "memif-to-ussched", 117 "type": 2, 118 "enabled": true, 119 "memif": { 120 "master": true, 121 "id": 2, 122 "socket_filename": "/tmp/memif.sock" 123 } 124 } 125 ' 126 127 # USSCHED - create memif slave to VSWITCH 128 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${USSCHED_NAME}/vpp/config/v1/interface/memif-to-vswitch ' 129 { 130 "name": "memif-to-vswitch", 131 "type": 2, 132 "enabled": true, 133 "mtu": 1500, 134 "memif": { 135 "master": false, 136 "id": 2, 137 "socket_filename": "/tmp/memif.sock" 138 }, 139 "ip_addresses": [ 140 "10.10.1.3/24" 141 ] 142 } 143 ' 144 145 # VSWITCH - create memif to VNF 1 (bridge domain B1) 146 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/memif-to-vnf-1 ' 147 { 148 "name": "memif-to-vnf-1", 149 "type": 2, 150 "enabled": true, 151 "memif": { 152 "master": true, 153 "id": 3, 154 "socket_filename": "/tmp/memif.sock" 155 } 156 } 157 ' 158 159 # VNF - create memif slave 1 to VSWITCH 160 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VNF_NAME}/vpp/config/v1/interface/memif-to-vswitch-1 ' 161 { 162 "name": "memif-to-vswitch-1", 163 "type": 2, 164 "enabled": true, 165 "mtu": 1500, 166 "memif": { 167 "master": false, 168 "id": 3, 169 "socket_filename": "/tmp/memif.sock" 170 }, 171 "ip_addresses": [ 172 "10.10.1.2/24" 173 ] 174 } 175 ' 176 177 # VSWITCH - create memif to vnf 2 (bridge domain B2) 178 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/interface/memif-to-vnf-2 ' 179 { 180 "name": "memif-to-vnf-2", 181 "type": 2, 182 "enabled": true, 183 "memif": { 184 "master": true, 185 "id": 4, 186 "socket_filename": "/tmp/memif.sock" 187 } 188 } 189 ' 190 191 # VNF - create memif slave 2 to VSWITCH 192 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VNF_NAME}/vpp/config/v1/interface/memif-to-vswitch-2 ' 193 { 194 "name": "memif-to-vswitch-2", 195 "type": 2, 196 "enabled": true, 197 "mtu": 1500, 198 "memif": { 199 "master": false, 200 "id": 4, 201 "socket_filename": "/tmp/memif.sock" 202 }, 203 "ip_addresses": [ 204 "166.111.8.2" 205 ] 206 } 207 ' 208 209 # VSWITCH - create bridge domain B2 (needs to be called after the interfaces have been created) 210 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/bd/B2 ' 211 { 212 "name": "B2", 213 "flood": true, 214 "unknown_unicast_flood": true, 215 "forward": true, 216 "learn": true, 217 "arp_termination": true, 218 "interfaces": [ 219 { 220 "name": "memif-to-rng" 221 }, 222 { 223 "name": "memif-to-ussched" 224 }, 225 { 226 "name": "memif-to-vnf-1" 227 }, 228 { 229 "name": "loop-bvi2", 230 "bridged_virtual_interface": true 231 } 232 ] 233 } 234 ' 235 236 # VSWITCH - create bridge domain B1 (needs to be called after the interfaces have been created) 237 docker exec -it ${ETCD_CONTAINER} etcdctl put /vnf-agent/${VSWITCH_NAME}/vpp/config/v1/bd/B1 ' 238 { 239 "name": "B1", 240 "flood": true, 241 "unknown_unicast_flood": true, 242 "forward": true, 243 "learn": true, 244 "interfaces": [ 245 { 246 "name": "memif-to-vnf-2" 247 }, 248 { 249 "name": "vxlan1" 250 } 251 ] 252 } 253 '