#!ipxe console || goto cmd_fail # This should always be the case since this is the embed script, but making it dynamic is more flexible during testing set slxtest:string something || goto cmd_fail iseq \${slxtest:md5} \${} && set slxext 0 || set slxext 1 || set dosleep:int32 0 || set idx:int32 -1 || # This will be set to usb or pxe #goto %mode% :PXE set retlbl:string next_open :next_open inc idx iseq 20 ${idx} && goto retry_sleep || echo Now checking if net${idx} is open... # No MAC -- done iseq ${net${idx}/mac} ${} && goto retry_sleep || echo net${idx} has MACaddr ${net${idx}/mac} # Has no IP -- ignore iseq ${net${idx}/ip} ${} && goto cleaniface || echo net${idx} has IPaddr ${net${idx}/ip} ifopen net${idx} || goto cleaniface # Success set retlbl dochain goto setvars # Now try to chain to main script :dochain echo Now chaining to main script set self:string http://%ipaddress%/boot/ipxe?uuid=${uuid}&mac=${mac}&manuf=${manufacturer:uristring}&product=${product:uristring}&platform=${platform:uristring}&slx-extensions=${slxext} chain -ar ${self} || goto fail echo How the hell did I get here? :fail echo Failed. set retlbl retry_sleep goto cleaniface :retry_sleep echo Trying again in ${dosleep} seconds... sleep ${dosleep} || iseq 0 ${dosleep} && set idx:int32 -1 || set dosleep 5 || :USB iseq 20 ${idx} && set idx:int32 -1 || set retlbl:string next_dhcp :next_dhcp inc idx iseq 20 ${idx} && goto retry_sleep || echo Now trying dhcp on net${idx} # No MAC -- done iseq ${net${idx}/mac} ${} && goto next_dhcp || echo Trying net${idx} via DHCP dhcp net${idx} || goto cleaniface # Success set retlbl dochain goto setvars # Clear interface IP address and close it # Jumps back to label stored in ${retlbl} :cleaniface echo Cleaning Interface net${idx} clear net${idx}/ip || clear net${idx}.dhcp/ip || ifclose net${idx} || goto ${retlbl} # Force global variables to have the values of the interface we succeeded on # Jumps back to label stored in ${retlbl} :setvars set ip ${net${idx}/ip} || set mac ${net${idx}/mac} || set netmask ${net${idx}/netmask} || set gateway ${net${idx}/gateway} || goto ${retlbl} :cmd_fail echo This iPXE was compiled with important commands/features missing echo Essential are: console, menu, param, set, clear echo Optionally, reboot and poweroff would be nice prompt Press any key to reboot || reboot || echo OK, reboot is apparently missing, so.... prompt Press any key to exit iPXE and return control to the BIOS || exit 1