[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#535008: configure_networking: support BOOTIF variable set by pxelinux



updated patch that only using only shell parameter expansion and cat:

diff --git a/scripts/functions b/scripts/functions
index 77de8f3..e9e94b3 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -258,6 +258,42 @@ parse_numeric() {
 
 configure_networking()
 {
+
+	# pxelinux sets BOOTIF to a value based on the mac address of the
+	# network card used to PXE boot, so use this value for DEVICE rather
+	# than a hard-coded device name from initramfs.conf. this facilitates
+	# network booting when machines may have multiple network cards.
+	# pxelinux sets BOOTIF to 01-$mac_address
+	if [ -n "${BOOTIF}" ]; then
+		# strip off the leading "01-", which isn't part of the mac
+		# address
+		temp_mac=${BOOTIF#*-}
+		bootif_mac=""
+		# given value is the right number of characters, so
+		# loop through replacing "-" with ":" 6 times...
+		for x in 1 2 3 4 5 6 ; do
+			# strip off everything before and including the last "-"
+			x=${temp_mac##*-}
+			# strip off everything before and including the
+			# first occurrance of $x
+			temp_mac=${temp_mac%%-$x}
+			if [ -z "$bootif_mac" ]; then
+				bootif_mac="$x"
+			else
+				bootif_mac="$x:$bootif_mac"
+			fi
+		done
+		for device in /sys/class/net/* ; do
+			if [ -f "$device/address" ]; then
+				current_mac=$(cat "$device/address")
+				if [ "$bootif_mac" = "$current_mac" ]; then
+					DEVICE=${device##*/}
+					break
+				fi
+			fi
+		done
+	fi
+
 	# networking already configured thus bail out
 	[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
 

sure is starting to look ugly.

tested that it basically works, though it may have lingering bugs if unexpected
values end up in $BOOTIF.

live well,
  vagrant



Reply to: