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

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



[ add hpa on cc ]

On Sun, 28 Jun 2009, Vagrant Cascadian wrote:

> 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.

and what if there is no sed in initramfs.

can pxelinux output BOOTIF in sysfs format?
 
> 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
> 

thanks

-- 
maks



Reply to: