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=$(< /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 conffile 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 config file present
+ if [ -n "${conffile}" ]
+ then
+ return;
+ fi
+
+ # Finally, add an option for the boot_file parameter
+ paramstr='name=netboot'
+
+ # Collect relevant parameters to add an option to the boot_file parameter
+ for name in rootpath siaddr boot_file
+ do
+ value=$(eval "echo \${$name}")
+ [ -n "$value" ] || continue;
+
+ paramstr="$paramstr $name=$value"
+ done
+
+ pb-event add@{interface} $paramstr
}
pb_remove () {
- pb-event remove@/net/${interface} name=netboot
+ pb-event remove@${interface} name=netboot
}
case "$1" in
-bound | renew)
+bound)
pb_add
;;
deconfig)