xref: /qemu/tests/qtest/pxe-test.c (revision 1485ef1c45eb349c841c22b1d31a51a5ece68a89)
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