Bug#535008: configure_networking: support BOOTIF variable set by pxelinux
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
Reply to: