blob: 2150ea68f449fd9ccd93f8b5055c527734e911fd (
plain) (
tree)
|
|
#!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
|