log="/var/log/petitboot/pb-udhcpc.log"
pb_add () {
- k_server_ip=${rootpath%%:*}
- k_root_dir=${rootpath#*:}
+ # Looks like udhcpc will give us different names, depending if the
+ # parameter was in the header, or specified by options
+ [ -z "$bootfile" ] && bootfile=${boot_file}
- [ ${k_server_ip} != ${rootpath} ] || k_server_ip=${serverid}
+ mac=$(cat /sys/class/net/$interface/address)
+ paramstr=''
- pb-event add@/net/${interface} \
- name=netboot \
- image=tftp://${siaddr}/${boot_file} \
- args="root=/dev/nfs ip=any nfsroot=${k_server_ip}:${k_root_dir}"
+ # Collect relevant DHCP response parameters into $paramstr
+ for name in pxeconffile pxepathprefix bootfile mac ip siaddr \
+ serverid tftp
+ do
+ value=$(eval "echo \${$name}")
+ [ -n "$value" ] || continue;
+
+ paramstr="$paramstr $name=$value"
+ done
+
+ pb-event dhcp@${interface} $paramstr
+
+ # Check if an explicit boot file present. If there is, add it as
+ # an option directly.
+ if [ -z "${bootfile}" ]
+ then
+ return;
+ fi
+
+ paramstr=""
+
+ # Collect relevant parameters to add an option to the bootfile
+ # parameter
+ for name in rootpath siaddr bootfile
+ do
+ value=$(eval "echo \${$name}")
+ [ -n "$value" ] || continue;
+
+ paramstr="$paramstr $name=$value"
+ done
+
+ pb-event add@${interface} name="netboot $interface ($bootfile)" \
+ $paramstr
}
pb_remove () {
- pb-event remove@/net/${interface} name=netboot
+ pb-event remove@${interface}
}
case "$1" in
-bound | renew)
+bound)
pb_add
;;
deconfig)