Lines Matching +full:pcie +full:- +full:mac
2 * QTest testcase for virtio-net failover
4 * See docs/system/virtio-net-failover.rst
8 * SPDX-License-Identifier: GPL-2.0-or-later
13 #include "libqos/pci-pc.h"
14 #include "migration-helpers.h"
18 #include "libqos/malloc-pc.h"
19 #include "libqos/virtio-pci.h"
28 #define BASE_MACHINE "-M q35 -nodefaults " \
29 "-device pcie-root-port,id=root0,addr=0x1,bus=pcie.0,chassis=1 " \
30 "-device pcie-root-port,id=root1,addr=0x2,bus=pcie.0,chassis=2 "
79 "-device virtio-net,bus=root0,id=standby0,failover=on", in test_error_id()
84 "'driver': 'virtio-net'," in test_error_id()
108 "-device virtio-net,bus=root0,id=standby0,failover=on", in test_error_pcie()
113 "'driver': 'virtio-net'," in test_error_pcie()
115 "'bus': 'pcie.0'," in test_error_pcie()
124 "Bus 'pcie.0' does not support hotplugging"); in test_error_pcie()
186 resp = qtest_qmp(qts, "{ 'execute': 'query-pci' }"); in get_bus()
214 char *mac; in get_mac() local
216 resp = qtest_qmp(qts, "{ 'execute': 'qom-get', " in get_mac()
219 "'property': 'mac' } }", name); in get_mac()
223 mac = g_strdup(qdict_get_str(resp, "return")); in get_mac()
227 return mac; in get_mac()
230 #define check_one_card(qts, present, id, mac) \ argument
244 g_assert_cmpstr(mac, ==, addr); \
261 g_assert(qdict_haskey(data, "device-id")); in get_failover_negociated_event()
279 qvirtio_start_device(&dev->vdev); in start_virtio_net_internal()
280 *features &= qvirtio_get_features(&dev->vdev); in start_virtio_net_internal()
281 qvirtio_set_features(&dev->vdev, *features); in start_virtio_net_internal()
282 qvirtio_set_driver_ok(&dev->vdev); in start_virtio_net_internal()
304 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, id); in start_virtio_net()
316 "-netdev user,id=hs0 " in test_on()
317 "-device virtio-net,bus=root0,id=standby0," in test_on()
318 "failover=on,netdev=hs0,mac="MAC_STANDBY0" " in test_on()
319 "-netdev user,id=hs1 " in test_on()
320 "-device virtio-net,bus=root1,id=primary0," in test_on()
321 "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0, in test_on()
336 "-netdev user,id=hs0 " in test_on_mismatch()
337 "-device virtio-net,bus=root0,id=standby0," in test_on_mismatch()
338 "failover=on,netdev=hs0,mac="MAC_STANDBY0" " in test_on_mismatch()
339 "-netdev user,id=hs1 " in test_on_mismatch()
340 "-device virtio-net,bus=root1,id=primary0," in test_on_mismatch()
341 "failover_pair_id=standby1,netdev=hs1,mac="MAC_PRIMARY0, in test_on_mismatch()
362 "-netdev user,id=hs0 " in test_off()
363 "-device virtio-net,bus=root0,id=standby0," in test_off()
364 "failover=off,netdev=hs0,mac="MAC_STANDBY0" " in test_off()
365 "-netdev user,id=hs1 " in test_off()
366 "-device virtio-net,bus=root1,id=primary0," in test_off()
367 "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0, in test_off()
388 "-netdev user,id=hs0 " in test_enabled()
389 "-device virtio-net,bus=root0,id=standby0," in test_enabled()
390 "failover=on,netdev=hs0,mac="MAC_STANDBY0" " in test_enabled()
391 "-netdev user,id=hs1 " in test_enabled()
392 "-device virtio-net,bus=root1,id=primary0," in test_enabled()
393 "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0" ", in test_enabled()
415 "-netdev user,id=hs0 " in test_guest_off()
416 "-device virtio-net,bus=root0,id=standby0," in test_guest_off()
417 "failover=on,netdev=hs0,mac="MAC_STANDBY0" " in test_guest_off()
418 "-netdev user,id=hs1 " in test_guest_off()
419 "-device virtio-net,bus=root1,id=primary0," in test_guest_off()
420 "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0" ", in test_guest_off()
446 "-netdev user,id=hs0 " in test_hotplug_1()
447 "-device virtio-net,bus=root0,id=standby0," in test_hotplug_1()
448 "failover=on,netdev=hs0,mac="MAC_STANDBY0" " in test_hotplug_1()
449 "-netdev user,id=hs1 ", 2); in test_hotplug_1()
459 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_hotplug_1()
463 "'mac': '"MAC_PRIMARY0"'}"); in test_hotplug_1()
478 "-netdev user,id=hs0 " in test_hotplug_1_reverse()
479 "-netdev user,id=hs1 " in test_hotplug_1_reverse()
480 "-device virtio-net,bus=root1,id=primary0," in test_hotplug_1_reverse()
481 "failover_pair_id=standby0,netdev=hs1,mac="MAC_PRIMARY0" ", in test_hotplug_1_reverse()
487 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_hotplug_1_reverse()
491 "'mac': '"MAC_STANDBY0"'}"); in test_hotplug_1_reverse()
511 "-netdev user,id=hs0 " in test_hotplug_2()
512 "-netdev user,id=hs1 ", in test_hotplug_2()
518 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_hotplug_2()
522 "'mac': '"MAC_STANDBY0"'}"); in test_hotplug_2()
532 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_hotplug_2()
536 "'mac': '"MAC_PRIMARY0"'}"); in test_hotplug_2()
551 "-netdev user,id=hs0 " in test_hotplug_2_reverse()
552 "-netdev user,id=hs1 ", in test_hotplug_2_reverse()
558 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_hotplug_2_reverse()
562 "'mac': '"MAC_PRIMARY0"'}"); in test_hotplug_2_reverse()
567 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_hotplug_2_reverse()
573 "'mac': '"MAC_STANDBY0"'}"); in test_hotplug_2_reverse()
577 * The primary should be hidden until the virtio-net driver in test_hotplug_2_reverse()
597 resp = qtest_qmp(qts, "{ 'execute': 'query-migrate' }"); in migrate_status()
617 g_assert(qdict_haskey(data, "device-id")); in get_unplug_primary_event()
633 "-netdev user,id=hs0 " in test_migrate_out()
634 "-netdev user,id=hs1 ", in test_migrate_out()
640 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_out()
644 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_out()
654 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_out()
660 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_out()
675 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "primary0"); in test_migrate_out()
683 if (strcmp(status, "wait-unplug") == 0) { in test_migrate_out()
699 /* check we stay in wait-unplug while the card is not ejected */ in test_migrate_out()
704 g_assert_cmpstr(status, ==, "wait-unplug"); in test_migrate_out()
709 /* OS unplugs the cards, QEMU can move from wait-unplug state */ in test_migrate_out()
747 "-netdev user,id=hs0 " in test_migrate_in()
748 "-netdev user,id=hs1 " in test_migrate_in()
749 "-incoming defer ", in test_migrate_in()
755 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_in()
759 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_in()
764 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_in()
770 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_in()
778 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "standby0"); in test_migrate_in()
802 "-netdev user,id=hs0 " in test_off_migrate_out()
803 "-netdev user,id=hs1 ", in test_off_migrate_out()
809 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_off_migrate_out()
813 "'mac': '"MAC_STANDBY0"'}"); in test_off_migrate_out()
818 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_off_migrate_out()
824 "'mac': '"MAC_PRIMARY0"'}"); in test_off_migrate_out()
869 "-netdev user,id=hs0 " in test_off_migrate_in()
870 "-netdev user,id=hs1 " in test_off_migrate_in()
871 "-incoming defer ", in test_off_migrate_in()
877 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_off_migrate_in()
881 "'mac': '"MAC_STANDBY0"'}"); in test_off_migrate_in()
886 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_off_migrate_in()
892 "'mac': '"MAC_PRIMARY0"'}"); in test_off_migrate_in()
921 "-netdev user,id=hs0 " in test_guest_off_migrate_out()
922 "-netdev user,id=hs1 ", in test_guest_off_migrate_out()
928 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_guest_off_migrate_out()
932 "'mac': '"MAC_STANDBY0"'}"); in test_guest_off_migrate_out()
937 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_guest_off_migrate_out()
943 "'mac': '"MAC_PRIMARY0"'}"); in test_guest_off_migrate_out()
996 "-netdev user,id=hs0 " in test_guest_off_migrate_in()
997 "-netdev user,id=hs1 " in test_guest_off_migrate_in()
998 "-incoming defer ", in test_guest_off_migrate_in()
1004 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_guest_off_migrate_in()
1008 "'mac': '"MAC_STANDBY0"'}"); in test_guest_off_migrate_in()
1013 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_guest_off_migrate_in()
1019 "'mac': '"MAC_PRIMARY0"'}"); in test_guest_off_migrate_in()
1048 "-netdev user,id=hs0 " in test_migrate_guest_off_abort()
1049 "-netdev user,id=hs1 ", in test_migrate_guest_off_abort()
1055 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_guest_off_abort()
1059 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_guest_off_abort()
1064 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_guest_off_abort()
1070 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_guest_off_abort()
1148 "-netdev user,id=hs0 " in test_migrate_abort_wait_unplug()
1149 "-netdev user,id=hs1 ", in test_migrate_abort_wait_unplug()
1155 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_abort_wait_unplug()
1159 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_abort_wait_unplug()
1169 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_abort_wait_unplug()
1175 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_abort_wait_unplug()
1190 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "primary0"); in test_migrate_abort_wait_unplug()
1206 /* OS unplugs the cards, QEMU can move from wait-unplug state */ in test_migrate_abort_wait_unplug()
1237 "-netdev user,id=hs0 " in test_migrate_abort_active()
1238 "-netdev user,id=hs1 ", in test_migrate_abort_active()
1244 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_abort_active()
1248 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_abort_active()
1258 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_abort_active()
1264 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_abort_active()
1279 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "primary0"); in test_migrate_abort_active()
1282 /* OS unplugs the cards, QEMU can move from wait-unplug state */ in test_migrate_abort_active()
1290 if (strcmp(status, "wait-unplug") != 0) { in test_migrate_abort_active()
1336 "-netdev user,id=hs0 " in test_migrate_off_abort()
1337 "-netdev user,id=hs1 ", in test_migrate_off_abort()
1343 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_off_abort()
1347 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_off_abort()
1357 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_off_abort()
1363 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_off_abort()
1428 "-netdev user,id=hs0 " in test_migrate_abort_timeout()
1429 "-netdev user,id=hs1 ", in test_migrate_abort_timeout()
1435 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_migrate_abort_timeout()
1439 "'mac': '"MAC_STANDBY0"'}"); in test_migrate_abort_timeout()
1449 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_migrate_abort_timeout()
1455 "'mac': '"MAC_PRIMARY0"'}"); in test_migrate_abort_timeout()
1470 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "primary0"); in test_migrate_abort_timeout()
1491 g_assert(qdict_haskey(ret, "total-time")); in test_migrate_abort_timeout()
1492 total = qdict_get_int(ret, "total-time"); in test_migrate_abort_timeout()
1518 "-device pcie-root-port,id=root2,addr=0x3,bus=pcie.0,chassis=3 " in test_multi_out()
1519 "-device pcie-root-port,id=root3,addr=0x4,bus=pcie.0,chassis=4 " in test_multi_out()
1520 "-netdev user,id=hs0 " in test_multi_out()
1521 "-netdev user,id=hs1 " in test_multi_out()
1522 "-netdev user,id=hs2 " in test_multi_out()
1523 "-netdev user,id=hs3 ", in test_multi_out()
1531 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_multi_out()
1535 "'mac': '"MAC_STANDBY0"'}"); in test_multi_out()
1542 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_multi_out()
1548 "'mac': '"MAC_PRIMARY0"'}"); in test_multi_out()
1562 qtest_qmp_device_add(qts, "virtio-net", "standby1", in test_multi_out()
1566 "'mac': '"MAC_STANDBY1"'}"); in test_multi_out()
1573 qtest_qmp_device_add(qts, "virtio-net", "primary1", in test_multi_out()
1579 "'mac': '"MAC_PRIMARY1"'}"); in test_multi_out()
1603 if (strcmp(qdict_get_str(resp, "device-id"), "primary0") == 0) { in test_multi_out()
1605 } else if (strcmp(qdict_get_str(resp, "device-id"), "primary1") == 0) { in test_multi_out()
1613 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, expected); in test_multi_out()
1621 if (strcmp(status, "wait-unplug") == 0) { in test_multi_out()
1641 g_assert_cmpstr(status, ==, "wait-unplug"); in test_multi_out()
1645 /* check we stay in wait-unplug while the card is not ejected */ in test_multi_out()
1650 g_assert_cmpstr(status, ==, "wait-unplug"); in test_multi_out()
1655 /* OS unplugs primary0, QEMU can move from wait-unplug state */ in test_multi_out()
1687 "-device pcie-root-port,id=root2,addr=0x3,bus=pcie.0,chassis=3 " in test_multi_in()
1688 "-device pcie-root-port,id=root3,addr=0x4,bus=pcie.0,chassis=4 " in test_multi_in()
1689 "-netdev user,id=hs0 " in test_multi_in()
1690 "-netdev user,id=hs1 " in test_multi_in()
1691 "-netdev user,id=hs2 " in test_multi_in()
1692 "-netdev user,id=hs3 " in test_multi_in()
1693 "-incoming defer ", in test_multi_in()
1701 qtest_qmp_device_add(qts, "virtio-net", "standby0", in test_multi_in()
1705 "'mac': '"MAC_STANDBY0"'}"); in test_multi_in()
1712 qtest_qmp_device_add(qts, "virtio-net", "primary0", in test_multi_in()
1718 "'mac': '"MAC_PRIMARY0"'}"); in test_multi_in()
1725 qtest_qmp_device_add(qts, "virtio-net", "standby1", in test_multi_in()
1729 "'mac': '"MAC_STANDBY1"'}"); in test_multi_in()
1736 qtest_qmp_device_add(qts, "virtio-net", "primary1", in test_multi_in()
1742 "'mac': '"MAC_PRIMARY1"'}"); in test_multi_in()
1752 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "standby0"); in test_multi_in()
1756 g_assert_cmpstr(qdict_get_str(resp, "device-id"), ==, "standby1"); in test_multi_in()
1781 ret = g_file_open_tmp("failover_test_migrate-XXXXXX", &tmpfile, NULL); in main()
1786 qtest_add_func("failover-virtio-net/params/error/id", test_error_id); in main()
1787 qtest_add_func("failover-virtio-net/params/error/pcie", test_error_pcie); in main()
1788 qtest_add_func("failover-virtio-net/params/on", test_on); in main()
1789 qtest_add_func("failover-virtio-net/params/on_mismatch", in main()
1791 qtest_add_func("failover-virtio-net/params/off", test_off); in main()
1792 qtest_add_func("failover-virtio-net/params/enabled", test_enabled); in main()
1793 qtest_add_func("failover-virtio-net/params/guest_off", test_guest_off); in main()
1796 qtest_add_func("failover-virtio-net/hotplug/1", test_hotplug_1); in main()
1797 qtest_add_func("failover-virtio-net/hotplug/1_reverse", in main()
1799 qtest_add_func("failover-virtio-net/hotplug/2", test_hotplug_2); in main()
1800 qtest_add_func("failover-virtio-net/hotplug/2_reverse", in main()
1808 qtest_add_data_func("failover-virtio-net/migrate/on/out", tmpfile, in main()
1810 qtest_add_data_func("failover-virtio-net/migrate/on/in", tmpfile, in main()
1812 qtest_add_data_func("failover-virtio-net/migrate/off/out", tmpfile, in main()
1814 qtest_add_data_func("failover-virtio-net/migrate/off/in", tmpfile, in main()
1816 qtest_add_data_func("failover-virtio-net/migrate/off/abort", tmpfile, in main()
1818 qtest_add_data_func("failover-virtio-net/migrate/guest_off/out", tmpfile, in main()
1820 qtest_add_data_func("failover-virtio-net/migrate/guest_off/in", tmpfile, in main()
1822 qtest_add_data_func("failover-virtio-net/migrate/guest_off/abort", tmpfile, in main()
1824 qtest_add_data_func("failover-virtio-net/migrate/abort/wait-unplug", in main()
1826 qtest_add_data_func("failover-virtio-net/migrate/abort/active", tmpfile, in main()
1829 qtest_add_data_func("failover-virtio-net/migrate/abort/timeout", in main()
1832 qtest_add_data_func("failover-virtio-net/migrate/multi/out", in main()
1834 qtest_add_data_func("failover-virtio-net/migrate/multi/in", in main()