Commit 1485ef1c authored by Thomas Huth's avatar Thomas Huth Committed by David Gibson
Browse files

tests: Test IPv6 and ppc64 in the PXE tester



The firmware of the pseries machine, SLOF, is able to load files via
IPv6 networking, too. So to test both, network bootloading on ppc64
and IPv6 (via Slirp) , let's add some PXE tests for this environment,
too. Since we can not use the normal x86 boot sector for network boot
loading, we use a simple Forth script on ppc64 instead.

Signed-off-by: default avatarThomas Huth <thuth@redhat.com>
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 196fe237
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ check-qtest-ppc64-y += tests/drive_del-test$(EXESUF)
check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
check-qtest-ppc64-y += tests/boot-serial-test$(EXESUF)
check-qtest-ppc64-y += tests/rtas-test$(EXESUF)
check-qtest-ppc64-y += tests/pxe-test$(EXESUF)

check-qtest-sh4-y = tests/endianness-test$(EXESUF)

+9 −0
Original line number Diff line number Diff line
@@ -77,6 +77,15 @@ int boot_sector_init(const char *fname)
        fprintf(stderr, "Couldn't open \"%s\": %s", fname, strerror(errno));
        return 1;
    }

    /* For Open Firmware based system, we can use a Forth script instead */
    if (strcmp(qtest_get_arch(), "ppc64") == 0) {
        memset(boot_sector, ' ', sizeof boot_sector);
        sprintf((char *)boot_sector, "\\ Bootscript\n%x %x c! %x %x c!\n",
                LOW(SIGNATURE), BOOT_SECTOR_ADDRESS + SIGNATURE_OFFSET,
                HIGH(SIGNATURE), BOOT_SECTOR_ADDRESS + SIGNATURE_OFFSET + 1);
    }

    fwrite(boot_sector, 1, sizeof boot_sector, f);
    fclose(f);
    return 0;
+15 −7
Original line number Diff line number Diff line
@@ -21,14 +21,14 @@

static const char *disk = "tests/pxe-test-disk.raw";

static void test_pxe_one(const char *params)
static void test_pxe_one(const char *params, bool ipv6)
{
    char *args;

    args = g_strdup_printf("-machine accel=tcg "
                           "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s "
                           "%s ",
                           disk, params);
    args = g_strdup_printf("-machine accel=tcg -boot order=n "
                           "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s,"
                           "ipv4=%s,ipv6=%s %s", disk, ipv6 ? "off" : "on",
                           ipv6 ? "on" : "off", params);

    qtest_start(args);
    boot_sector_test();
@@ -38,12 +38,17 @@ static void test_pxe_one(const char *params)

static void test_pxe_e1000(void)
{
    test_pxe_one("-device e1000,netdev=" NETNAME);
    test_pxe_one("-device e1000,netdev=" NETNAME, false);
}

static void test_pxe_virtio_pci(void)
{
    test_pxe_one("-device virtio-net-pci,netdev=" NETNAME);
    test_pxe_one("-device virtio-net-pci,netdev=" NETNAME, false);
}

static void test_pxe_spapr_vlan(void)
{
    test_pxe_one("-vga none -device spapr-vlan,netdev=" NETNAME, true);
}

int main(int argc, char *argv[])
@@ -60,6 +65,9 @@ int main(int argc, char *argv[])
    if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
        qtest_add_func("pxe/e1000", test_pxe_e1000);
        qtest_add_func("pxe/virtio", test_pxe_virtio_pci);
    } else if (strcmp(arch, "ppc64") == 0) {
        qtest_add_func("pxe/virtio", test_pxe_virtio_pci);
        qtest_add_func("pxe/spapr-vlan", test_pxe_spapr_vlan);
    }
    ret = g_test_run();
    boot_sector_cleanup(disk);