14e082566SVictor Kaplansky /* 24e082566SVictor Kaplansky * PXE test cases. 34e082566SVictor Kaplansky * 44e082566SVictor Kaplansky * Copyright (c) 2016 Red Hat Inc. 54e082566SVictor Kaplansky * 64e082566SVictor Kaplansky * Authors: 74e082566SVictor Kaplansky * Michael S. Tsirkin <mst@redhat.com>, 84e082566SVictor Kaplansky * Victor Kaplansky <victork@redhat.com> 94e082566SVictor Kaplansky * 104e082566SVictor Kaplansky * This work is licensed under the terms of the GNU GPL, version 2 or later. 114e082566SVictor Kaplansky * See the COPYING file in the top-level directory. 124e082566SVictor Kaplansky */ 134e082566SVictor Kaplansky 14974dc73dSPeter Maydell #include "qemu/osdep.h" 154e082566SVictor Kaplansky #include <glib/gstdio.h> 164e082566SVictor Kaplansky #include "qemu-common.h" 174e082566SVictor Kaplansky #include "libqtest.h" 184e082566SVictor Kaplansky #include "boot-sector.h" 194e082566SVictor Kaplansky 204e082566SVictor Kaplansky #define NETNAME "net0" 214e082566SVictor Kaplansky 224e082566SVictor Kaplansky static const char *disk = "tests/pxe-test-disk.raw"; 234e082566SVictor Kaplansky 24*1485ef1cSThomas Huth static void test_pxe_one(const char *params, bool ipv6) 254e082566SVictor Kaplansky { 264e082566SVictor Kaplansky char *args; 274e082566SVictor Kaplansky 28*1485ef1cSThomas Huth args = g_strdup_printf("-machine accel=tcg -boot order=n " 29*1485ef1cSThomas Huth "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s," 30*1485ef1cSThomas Huth "ipv4=%s,ipv6=%s %s", disk, ipv6 ? "off" : "on", 31*1485ef1cSThomas Huth ipv6 ? "on" : "off", params); 324e082566SVictor Kaplansky 334e082566SVictor Kaplansky qtest_start(args); 344e082566SVictor Kaplansky boot_sector_test(); 354e082566SVictor Kaplansky qtest_quit(global_qtest); 364e082566SVictor Kaplansky g_free(args); 374e082566SVictor Kaplansky } 384e082566SVictor Kaplansky 394e082566SVictor Kaplansky static void test_pxe_e1000(void) 404e082566SVictor Kaplansky { 41*1485ef1cSThomas Huth test_pxe_one("-device e1000,netdev=" NETNAME, false); 424e082566SVictor Kaplansky } 434e082566SVictor Kaplansky 444e082566SVictor Kaplansky static void test_pxe_virtio_pci(void) 454e082566SVictor Kaplansky { 46*1485ef1cSThomas Huth test_pxe_one("-device virtio-net-pci,netdev=" NETNAME, false); 47*1485ef1cSThomas Huth } 48*1485ef1cSThomas Huth 49*1485ef1cSThomas Huth static void test_pxe_spapr_vlan(void) 50*1485ef1cSThomas Huth { 51*1485ef1cSThomas Huth test_pxe_one("-vga none -device spapr-vlan,netdev=" NETNAME, true); 524e082566SVictor Kaplansky } 534e082566SVictor Kaplansky 544e082566SVictor Kaplansky int main(int argc, char *argv[]) 554e082566SVictor Kaplansky { 564e082566SVictor Kaplansky int ret; 574e082566SVictor Kaplansky const char *arch = qtest_get_arch(); 584e082566SVictor Kaplansky 594e082566SVictor Kaplansky ret = boot_sector_init(disk); 604e082566SVictor Kaplansky if(ret) 614e082566SVictor Kaplansky return ret; 624e082566SVictor Kaplansky 634e082566SVictor Kaplansky g_test_init(&argc, &argv, NULL); 644e082566SVictor Kaplansky 654e082566SVictor Kaplansky if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) { 664e082566SVictor Kaplansky qtest_add_func("pxe/e1000", test_pxe_e1000); 674e082566SVictor Kaplansky qtest_add_func("pxe/virtio", test_pxe_virtio_pci); 68*1485ef1cSThomas Huth } else if (strcmp(arch, "ppc64") == 0) { 69*1485ef1cSThomas Huth qtest_add_func("pxe/virtio", test_pxe_virtio_pci); 70*1485ef1cSThomas Huth qtest_add_func("pxe/spapr-vlan", test_pxe_spapr_vlan); 714e082566SVictor Kaplansky } 724e082566SVictor Kaplansky ret = g_test_run(); 734e082566SVictor Kaplansky boot_sector_cleanup(disk); 744e082566SVictor Kaplansky return ret; 754e082566SVictor Kaplansky } 76