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  '