On Sun, Jun 28, 2009 at 11:51:32PM +0100, Ben Hutchings wrote: > On Sun, 2009-06-28 at 14:50 -0700, Vagrant Cascadian wrote: > > Package: initramfs-tools > > Version: 0.93.3 > > Severity: wishlist > > Tags: patch > > > > when booting thin clients with multiple network cards, > > initramfs-tools/ipconfig > > have a hard time figuring out which interface to use. attached is a patch > > which > > sets DEVICE to the interface matching the mac address that pxelinux passes > > when > > using the IPAPPEND 2 or 3 options. > > This sounds reasonable, but your patch makes unnecessary use of several > commands. > > > diff --git a/scripts/functions b/scripts/functions > > index 77de8f3..ec0ffd2 100644 > > --- a/scripts/functions > > +++ b/scripts/functions > > @@ -258,6 +258,19 @@ 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. > > + if [ -n "${BOOTIF}" ]; then > > + normal_mac=$(echo $BOOTIF | sed -e 's,^01-,,g' -e 's,-,:,g' | > > tr [a-z] [A-Z]) > > You can use sed's y/// command instead of piping to tr. > > > + new_device=$(ifconfig -a | awk "/$normal_mac/"'{print $1}') > [...] > > You can use the files /sys/class/net/*/address instead of ifconfig.
thanks for the suggestions, updated patch: diff --git a/scripts/functions b/scripts/functions index 77de8f3..f99e779 100644 --- a/scripts/functions +++ b/scripts/functions @@ -258,6 +258,25 @@ 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 + bootif_mac=$(echo ${BOOTIF#*-} | sed -e 'y,-,:,') + 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 live well, vagrant -- To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org