#!ipxe
{#
SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
SPDX-License-Identifier: Apache-2.0
#}

# variables
set menu_timeout 10000
set menu_default exit
set http_server_url {{ pxeboot_web_server }}

# menu
:start
menu ONF iPXE Boot Menu
item --gap --             ------------------------- System and Network Info ------------------------
item --gap --             MAC: ${net0/mac}, Serial Number: ${serial}, Chipset: ${net0/chip}
item --gap --             Manufacturer: ${manufacturer}, Product: ${product}
item --gap --             UUID: ${uuid}
item --gap --             IP: ${net0/ip}, Netmask: ${net0/netmask}, Gateway: ${net0/gateway}
item --gap --             DNS Servers: ${net0/dns}, Domain: ${net0/domain}
item --gap --             DHCP Server: ${net0/dhcp-server}
item --gap --             ------------------------- Operating systems ------------------------------
{% if "debian10" in pxeboot_boot_images %}
item --key d deb10        Debian 10 Installer
item --key f deb10f       Debian 10 Installer (nonfree firmware)
{% endif %}
{% if "debian11" in pxeboot_boot_images %}
item --key h deb11f       Debian 11 Installer (nonfree firmware)
item --key h deb11afs     Debian 11 Installer (nonfree firmware, auto, serial)
item --key h deb11afm     Debian 11 Installer (nonfree firmware, auto, MAC)
{% endif %}
{% if "ubuntu1804" in pxeboot_boot_images %}
item --key u ub1804       Ubuntu 18.04 Installer
item --key a ub1804as     Ubuntu 18.04 Installer (fully automatic, serial)
item --key m ub1804am     Ubuntu 18.04 Installer (fully automatic, MAC)
{% endif %}
{% if "ubuntu2004" in pxeboot_boot_images %}
item --key v ub2004       Ubuntu 20.04 Installer
{% endif %}
{% if "openbsd70" in pxeboot_boot_images %}
item --key o openbsd70    OpenBSD 7.0 Installer
{% endif %}
{% if "memtest" in pxeboot_boot_images %}
item --key m memtest      Memtest
{% endif %}
item --gap --             ------------------------- Utilities --------------------------------------
item --key c configure    Configuration Menu
item --key s shell        iPXE Shell
item --key r reboot       Reboot
item --key x exit         Exit iPXE and continue system boot
choose --timeout ${menu_timeout} --default ${menu_default} selected || goto cancel
set menu-timeout 0
goto ${selected}

# Utility functions
:cancel
echo Menu canceled, dropping to iPXE shell
goto shell

:configure
config
set menu-timeout 0
set submenu-timeout 0
goto start

:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start

:failed
echo Booting failed, dropping to shell
goto shell

:reboot
reboot

:exit
exit

# diagnostics
{% if "memtest" in pxeboot_boot_images %}

# memtest
:memtest
echo Booting Memtest
kernel ${http_server_url}/utils/memdisk
initrd ${http_server_url}/memtest/memtest.iso
imgargs memdisk iso raw
boot || goto failed
{% endif %}

# installers
{% if "debian11" in pxeboot_boot_images %}

# Debian 11 with nonfree firmware
:deb11f
echo Booting Debian 11 Installer with nonfree firmware
kernel ${http_server_url}/debian11/linux initrd=initrd.gz initrd=firmware.cpio.gz
initrd ${http_server_url}/debian11/initrd.gz
initrd ${http_server_url}/debian11/firmware.cpio.gz
boot || goto failed

# Debian 11 with nonfree firmware, auto, serial
:deb11afs
echo Booting Debian 11 Installer with nonfree firmware, auto, serial
kernel ${http_server_url}/debian11/linux initrd=initrd.gz initrd=firmware.cpio.gz initrd=preseed.cfg
initrd ${http_server_url}/debian11/initrd.gz
initrd ${http_server_url}/debian11/firmware.cpio.gz
initrd ${http_server_url}/debian11/${serial}_preseed.cfg preseed.cfg
boot || goto failed

# Debian 11 with nonfree firmware, auto, MAC
:deb11afm
echo Booting Debian 11 Installer with nonfree firmware, auto, MAC
kernel ${http_server_url}/debian11/linux initrd=initrd.gz initrd=firmware.cpio.gz initrd=preseed.cfg
initrd ${http_server_url}/debian11/initrd.gz
initrd ${http_server_url}/debian11/firmware.cpio.gz
initrd ${http_server_url}/debian11/${net0/mac}_preseed.cfg preseed.cfg
boot || goto failed
{% endif %}
{% if "ubuntu1804" in pxeboot_boot_images %}

# Ubuntu 18.04
:ub1804
echo Booting Ubuntu 18.04 Installer
kernel ${http_server_url}/ubuntu1804/linux initrd=initrd.gz
initrd ${http_server_url}/ubuntu1804/initrd.gz initrd.gz
boot || goto failed

# Ubuntu 18.04 autoinstall, serial
#  https://ipxe.org/appnote/debian_preseed
:ub1804as
echo Booting Ubuntu 18.04 Installer (autoinstall, serial)
kernel ${http_server_url}/ubuntu1804/linux initrd=initrd.gz initrd=preseed.cfg
initrd ${http_server_url}/ubuntu1804/initrd.gz
initrd ${http_server_url}/ubuntu1804/${serial}_preseed.cfg preseed.cfg
boot || goto failed

# Ubuntu 18.04 autoinstall, MAC
#  https://ipxe.org/appnote/debian_preseed
:ub1804am
echo Booting Ubuntu 18.04 Installer (autoinstall, MAC)
kernel ${http_server_url}/ubuntu1804/linux initrd=initrd.gz initrd=preseed.cfg
initrd ${http_server_url}/ubuntu1804/initrd.gz
initrd ${http_server_url}/ubuntu1804/${net0/mac}_preseed.cfg preseed.cfg
boot || goto failed
{% if pxeboot_image_debug %}

# Ubuntu 18.04 autoinstall, text-mode, debug
:ub1804adt
echo Booting Ubuntu 18.04 Installer, text mode, debug
kernel ${http_server_url}/ubuntu1804/linux initrd=initrd.gz initrd=preseed.cfg DEBIAN_FRONTEND=text BOOT_DEBUG=2
initrd ${http_server_url}/ubuntu1804/initrd.gz
initrd ${http_server_url}/ubuntu1804/${serial}_preseed.cfg preseed.cfg
boot || goto failed
{% endif %}
{% endif %}
{% if "ubuntu2004" in pxeboot_boot_images %}

# Ubuntu 20.04
:ub2004
echo Booting Ubuntu 20.04 Installer
kernel ${http_server_url}/ubuntu2004/linux initrd=initrd.gz
initrd ${http_server_url}/ubuntu2004/initrd.gz
boot || goto failed
{% endif %}
{% if "openbsd70" in pxeboot_boot_images %}

# OpenBSD 7.0
:openbsd70
echo Booting OpenBSD 7.0
kernel ${http_server_url}/utils/memdisk
initrd ${http_server_url}/openbsd70/cd70.iso
imgargs memdisk iso raw
boot || goto failed
{% endif %}
