Skip to content

fix(xnba): the loader cannot netboot a node over IPv6 - #102

Closed
dhilst wants to merge 3 commits into
xcat2:masterfrom
VersatusHPC:fix/xnba-ipv6
Closed

dhilst wants to merge 3 commits into
xcat2:masterfrom
VersatusHPC:fix/xnba-ipv6

Conversation

@dhilst

@dhilst dhilst commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

The xnba loader cannot netboot a node over IPv6. The node reaches xNBA and stops at
"No configuration methods succeeded" without ever sending a DHCPv6 solicit, so its firmware
releases the address and gives up.

The cause is that the package ships a loader its own spec does not build. binary/xnba.efi
reports xNBA 1.20.1+ while xnba-undi.spec builds 1.21.1, and 1.20.1 carries no
NET_PROTO_IPV6 in config/defaults/efi.h. 1.21.1 does, so rebuilding the binary from the
source the spec already names is the whole fix.

Both loaders are rebuilt from xnba-1.21.1.tar.bz2 with the six patches the spec applies. The
EFI loader grows from 155520 to 187904 bytes and gains IPv6. The BIOS loader grows from 66899
to 67789, which is the release difference and not the protocol: built with and without an
explicit NET_PROTO_IPV6 override, undionly.kkpxe is byte identical at 67789, because
config/defaults/efi.h reaches only the EFI build.

Measured on an IPv6-only AlmaLinux 10.1 node with the DHCPv6 boot file pointed at xnba.efi.
The shipped loader logged only the firmware DUID and stopped. The rebuilt loader reports
Configuring (net0 ...) ok and net0: 2001:db8:149::1002/64 gw fe80::4054:ff:fec9:95d3, and
the DHCPv6 server logs a solicit from xNBA's own DUID beside the firmware's.

The branch carries a first attempt and its revert. That attempt added a
config/local/general.h override, which the byte identical builds above show does nothing

…h it

iPXE ships NET_PROTO_IPV6 off: src/config/general.h of xnba-1.21.1 comments the
define out, and xnba-1.20.1 undefines it. The loader therefore has no IPv6 at
all. A node that netboots over IPv6 reaches xNBA and stops at "No configuration
methods succeeded" without ever sending a DHCPv6 solicit, while iPXE 2.0.0 on
the same network solicits and configures.

config/local/general.h is included after the defaults, so it is where the
protocol is turned on. The guard keeps it out of undionly.kkpxe: a BIOS PXE ROM
has a size limit, and BIOS PXE has no IPv6 form to use it with. Measured with
the preprocessor: PLATFORM_efi enables it, PLATFORM_pcbios does not.

Built and booted on an IPv6-only alma10.1 node. The rebuilt loader reports
"Configuring (net0 ...) ok" and "net0: 2001:db8:149::1002/64 gw fe80::...",
and the DHCPv6 server logs a solicit from xNBA's own DUID beside the firmware's.
The loader it replaces logged only the firmware's.

This changes the compile recipe alone. mockbuild.pl writes its own spec and
packages the checked-in binary/xnba.efi, so the shipped loader is unaffected
until that binary is rebuilt. That binary reports xNBA 1.20.1+ while this spec
builds 1.21.1, so rebuilding it also moves the loader a release, which is a
separate decision.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
This reverts the override added in df0d056. iPXE 1.21.1 enables the protocol
for EFI in config/defaults/efi.h, which general.h includes before the line that
comments NET_PROTO_IPV6 out, so an EFI build already has IPv6. Building
undionly.kkpxe and snponly.efi with and without the override gives byte
identical images: 67789 and 187904 either way.

The real defect is that the loader the package ships is not the one this spec
builds. binary/xnba.efi reports xNBA 1.20.1+, and 1.20.1 carries no
NET_PROTO_IPV6 in config/defaults/efi.h at all, which is why an IPv6 node
reaches xNBA and stops at "No configuration methods succeeded" without ever
sending a DHCPv6 solicit. Rebuilding the binary from the source this spec
already names is the whole fix: the rebuilt loader configures over IPv6 and
solicits with its own DUID, measured on an IPv6-only alma10.1 node.

That rebuild replaces a checked-in artifact used by every xnba node and moves
the loader a release, so it is recorded rather than made here.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
binary/xnba.efi reported xNBA 1.20.1+ while xnba-undi.spec builds 1.21.1, so
the package shipped a loader its own recipe does not produce. 1.20.1 carries no
NET_PROTO_IPV6 in config/defaults/efi.h, and 1.21.1 does, so the stale binary is
why an IPv6 node reaches xNBA and stops at "No configuration methods succeeded"
without ever sending a DHCPv6 solicit.

Both loaders are rebuilt from xnba-1.21.1.tar.bz2 with the six patches the spec
applies, on an alma10 host with the BuildRequires the spec names.

The EFI loader gains IPv6 and grows from 155520 to 187904 bytes. The BIOS loader
grows from 66899 to 67789, which is the release difference and not the protocol:
built with and without an explicit NET_PROTO_IPV6 override, undionly.kkpxe is
byte identical at 67789, because config/defaults/efi.h reaches only the EFI
build.

Measured on an IPv6-only alma10.1 node with the DHCPv6 boot file pointed at
xnba.efi. The shipped loader logged only the firmware DUID and stopped. The
rebuilt loader reports "Configuring (net0 ...) ok" and
"net0: 2001:db8:149::1002/64 gw fe80::4054:ff:fec9:95d3", and the server logs a
solicit from xNBA's own DUID beside the firmware's.

xnba stays out of the DHCPv6 boot file gate in xcat-core until this loader
ships, because a node offered a boot file its loader cannot use waits for a
timeout it cannot diagnose.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
@dhilst
dhilst requested a review from viniciusferrao October 30, 2026 13:03
@dhilst dhilst self-assigned this Oct 30, 2026
@dhilst

dhilst commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

Closing in favour of netboot=ipxe for IPv6 on x86_64. The rebuilt xnba.efi does speak DHCPv6, but xCAT gives xnba nodes no DHCPv6 boot file. Over v6 xNBA also sends user class iPXE, not xNBA, so the second stage never matches and the loader would chainload itself. ipxe runs the same xnba.pm scripts and already has IPv6 and Secure Boot. The stale binary/ against the 1.21.1 spec is still real, and it's worth fixing on its own by building from the spec.

@dhilst dhilst closed this Oct 30, 2026
@viniciusferrao

Copy link
Copy Markdown
Member

Closing in favour of netboot=ipxe for IPv6 on x86_64. The rebuilt xnba.efi does speak DHCPv6, but xCAT gives xnba nodes no DHCPv6 boot file. Over v6 xNBA also sends user class iPXE, not xNBA, so the second stage never matches and the loader would chainload itself. ipxe runs the same xnba.pm scripts and already has IPv6 and Secure Boot. The stale binary/ against the 1.21.1 spec is still real, and it's worth fixing on its own by building from the spec.

I agree.

iPXE will be the way forward and we shouuld estimulate it's usage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants