Repository navigation
v0.3.1
Fixed
windhcp://could not set a multi-valued option (two name servers, two NTP
servers) with its default PowerShell method, and the failure took the rest of
the reservation with it. The value was sent comma-joined, and
Set-DhcpServerv4OptionValue -ValuetakesString[]: Windows answered
"Parameters for option value to be set for option ID 6 do not match with option
definition" and, underErrorActionPreference = 'Stop', every option after it
was abandoned — so the target got a router and no boot file. Values are now
sent as a list. Present since the backend shipped in 0.2.0; found by running it
against a real Windows Server 2025 DHCP server rather than reading the script.
Added
DhcpServer.extras(ctx, phase)— one documented extension point for
backend-native fragments netboot does not model: an extra statement, an extra
command, or a condition such as the iPXE chainload (serve the iPXE binary to a
PXE ROM, the script to iPXE). It defaults to the configuredraw.<backend>
fragments, and a subclass overrides it to decide per target. All four shipped
backends consume it, andraw.<backend>.remove=is new: a fragment that
belongs to teardown rather than to arming. Forwindhcp://a fragment may be a
PowerShell line or a{"Args": [...], "Ignore": bool}netsh command, which
works under eithermethod.method=netshverifies what the server actually applied. netsh exits 0 and
prints its success line even when it rejected what it was told — measured: a
domain-name-serversoption with one unreachable address keeps the other, says
"not a valid DNS Server", says "Command completed successfully", exits 0. So
after applying, netboot reads the state back withnetsh ... dump(the one
netsh output that is command syntax rather than localised prose) and fails
naming any option that is missing or short of values. The cmdlet method needs
none of this: Windows raises there by itself.windhcp://takesmethod=powershell|netsh. The default is unchanged (the
DhcpServercmdlets);method=netshdrivesnetsh dhcp server ...instead,
for a host where that PowerShell module is not installed. It is independent of
transport=, and netsh is invoked from PowerShell with each argument an array
element, so no value is spliced into a command line. Success is$LASTEXITCODE
rather than netsh's localised success line, a removal tolerates a reservation
that is not there, option data types are declared per option (unmapped ones as
STRING), and a multi-valued option becomes one argument per value.
Full Changelog: v0.3.0...v0.3.1