diff --git a/ansible/lab b/ansible/lab
index 4d9f4a32338..8e8233a5809 100644
--- a/ansible/lab
+++ b/ansible/lab
@@ -127,6 +127,9 @@ sonic_s6000:
ansible_host: 10.250.0.122
ansible_hostv6: fec0::ffff:afa:12
card_type: supervisor
+ vlab-vpp-01:
+ ansible_host: 10.250.0.92
+ ansible_hostv6: fec0::ffff:afa:70
sonic_s6100:
vars:
diff --git a/ansible/roles/vm_set/tasks/start_sonic_vm.yml b/ansible/roles/vm_set/tasks/start_sonic_vm.yml
index 40186d59871..318d22a3308 100644
--- a/ansible/roles/vm_set/tasks/start_sonic_vm.yml
+++ b/ansible/roles/vm_set/tasks/start_sonic_vm.yml
@@ -9,7 +9,6 @@
- "{{ sonic_vm_storage_location }}/disks"
- set_fact:
- src_disk_image: "{{ sonic_vm_storage_location }}/images/sonic-vs.img"
disk_image: "{{ sonic_vm_storage_location }}/disks/sonic_{{ dut_name }}.img"
mgmt_ip_address: " {{ hostvars[dut_name]['ansible_host'] }}"
mgmt_gw: "{{ vm_mgmt_gw | default(mgmt_gw) }}"
@@ -17,6 +16,10 @@
hwsku: "{{ hostvars[dut_name].hwsku }}"
num_asic: "{{ hostvars[dut_name]['num_asics'] | default(1) }}"
card_type: "{{ hostvars[dut_name]['card_type'] | default('pizzabox') }}"
+ asic_type: "{{ hostvars[dut_name].asic_type | default('') }}"
+
+- set_fact:
+ src_disk_image: "{{ sonic_vm_storage_location }}/images/sonic-{{ 'vpp' if 'vpp' == asic_type else 'vs' }}.img"
- name: Remove arp entry for {{ dut_name }}
shell: arp -d {{ mgmt_ip_address }}
diff --git a/ansible/roles/vm_set/templates/sonic.xml.j2 b/ansible/roles/vm_set/templates/sonic.xml.j2
index 1c3743576f4..64f4e21051e 100644
--- a/ansible/roles/vm_set/templates/sonic.xml.j2
+++ b/ansible/roles/vm_set/templates/sonic.xml.j2
@@ -29,6 +29,14 @@
+{% elif asic_type == 'vpp' %}
+ 8
+ 8
+ 6
+
+
+
+
{% else %}
6
6
@@ -68,12 +76,20 @@
+ {% if asic_type == 'vpp' %}
+
+ {% else %}
+ {% endif %}
{% for i in range(port_alias|length) %}
+ {% if asic_type == 'vpp' %}
+
+ {% else %}
+ {% endif %}
{% endfor %}
diff --git a/ansible/veos_vtb b/ansible/veos_vtb
index 362b4aff865..154a776883d 100644
--- a/ansible/veos_vtb
+++ b/ansible/veos_vtb
@@ -80,6 +80,7 @@ all:
vlab-t2-1-2:
vlab-t2-1-sup:
vlab-c-02:
+ vlab-vpp-01:
ptf:
hosts:
ptf-01:
@@ -328,6 +329,15 @@ all:
ansible_user: admin
ansible_ssh_user: admin
ansible_altpassword: admin
+ vlab-vpp-01:
+ ansible_host: 10.250.0.92
+ ansible_hostv6: fec0::ffff:afa:70
+ type: kvm
+ hwsku: Force10-S6000
+ asic_type: vpp
+ serial_port: 9001
+ ansible_password: password
+ ansible_user: admin
# The groups below are helpers to limit running playbooks to a specific server only
server_1:
diff --git a/ansible/vtestbed.yaml b/ansible/vtestbed.yaml
index 3c1493168cd..3680bd2b5f7 100644
--- a/ansible/vtestbed.yaml
+++ b/ansible/vtestbed.yaml
@@ -442,3 +442,33 @@
inv_name: veos_vtb
auto_recover: 'False'
comment: Tests virtual force vs vm with 7 nodes
+
+- conf-name: vms-kvm-vpp-t1-lag
+ group-name: vms6-2
+ topo: t1-lag
+ ptf_image_name: docker-ptf
+ ptf: ptf-02
+ ptf_ip: 10.250.0.106/24
+ ptf_ipv6: fec0::ffff:afa:6/64
+ server: server_1
+ vm_base: VM0104
+ dut:
+ - vlab-vpp-01
+ inv_name: veos_vtb
+ auto_recover: 'False'
+ comment: Tests virtual vpp switch vm
+
+- conf-name: vms-kvm-vpp-t1
+ group-name: vms6-2
+ topo: t1
+ ptf_image_name: docker-ptf
+ ptf: ptf-02
+ ptf_ip: 10.250.0.106/24
+ ptf_ipv6: fec0::ffff:afa:6/64
+ server: server_1
+ vm_base: VM0104
+ dut:
+ - vlab-vpp-01
+ inv_name: veos_vtb
+ auto_recover: 'False'
+ comment: Tests virtual vpp switch vm
diff --git a/docs/testbed/README.testbed.VPP.md b/docs/testbed/README.testbed.VPP.md
new file mode 100644
index 00000000000..81872b916e8
--- /dev/null
+++ b/docs/testbed/README.testbed.VPP.md
@@ -0,0 +1,23 @@
+# Running Sonic-mgmt with Sonic-VPP as DUT
+To set up a testbed with a Sonic-VPP DUT follow the [VS testbed setup](README.testbed.VsSetup.md), and use the following commands during bringup. All of the following commands are to be run from the sonic-mgmt container.
+
+### Add topology:
+```
+cd /data/sonic-mgmt/ansible
+./testbed-cli.sh -t vtestbed.yaml -m veos_vtb -k ceos add-topo vms-kvm-vpp-t1-lag password.txt
+```
+### Deploy minigraph:
+```
+cd /data/sonic-mgmt/ansible
+./testbed-cli.sh -t vtestbed.yaml -m veos_vtb deploy-mg vms-kvm-vpp-t1-lag veos_vtb password.txt
+```
+### Example test run:
+```
+cd /data/sonic-mgmt/tests
+./run_tests.sh -n vms-kvm-vpp-t1-lag -d vlab-vpp-01 -O -u -l debug -e -s -e "--disable_loganalyzer --skip_sanity --mark-conditions-files common/plugins/conditional_mark/tests_mark_conditions.yaml" -e "--mark-conditions-files common/plugins/conditional_mark/tests_mark_conditions_sonic_vpp.yaml" -m individual -f vtestbed.yaml -i ../ansible/veos_vtb -p -c
+```
+### Remove topology:
+```
+cd /data/sonic-mgmt/ansible
+./testbed-cli.sh -t vtestbed.yaml -m veos_vtb -k ceos remove-topo vms-kvm-vpp-t1-lag password.txt
+```