[SLOF] [PATCH] libnet: Correctly re-initialize the "ip_version" variable each time

Greg Kurz groug at kaod.org
Sat Apr 6 03:19:45 AEDT 2019


On Fri,  5 Apr 2019 17:58:09 +0200
Thomas Huth <thuth at redhat.com> wrote:

> I recently noticed that if you start QEMU with two NICs, and only
> want to boot from the second NIC, SLOF only tries to get an IP
> address via DHCPv6 instead of trying both, DHCPv4 and DHCPv6. For
> example:
> 
> $ qemu-system-ppc64 -nic hubport,hubid=1 \
>     -nic user,model=virtio,tftp=/.../tftp,bootfile=zImage.pseries
> [...]
> Trying to load:  from: /vdevice/l-lan at 71000002 ...
>  Initializing NIC
>   Reading MAC address from device: 52:54:00:12:34:56
>   Requesting information via DHCP:  007
> Aborted
> 
> E3001 (net) Could not get IP address
> Trying to load:  from: /pci at 800000020000000/ethernet at 0 ...
>  Initializing NIC
>   Reading MAC address from device: 52:54:00:12:34:57
>   Requesting information via DHCPv6: done
>   Using IPv6 address: fec0::5254:ff:fe12:3457
> 
> The problem is that we never re-initialize the "ip_version" variable
> anymore, so once it has been set to 6, it stays at 6 for the second
> network boot attempt, too. Thus reset the variable to 4 at the beginning
> of the netload() function.
> 
> Signed-off-by: Thomas Huth <thuth at redhat.com>
> ---

Reviewed-by: Greg Kurz <groug at kaod.org>

>  lib/libnet/netload.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/libnet/netload.c b/lib/libnet/netload.c
> index f7ec341..2dc00f0 100644
> --- a/lib/libnet/netload.c
> +++ b/lib/libnet/netload.c
> @@ -38,7 +38,7 @@
>  #define MAX_PKT_SIZE         1720
>  #define DEFAULT_BOOT_RETRIES 10
>  #define DEFAULT_TFTP_RETRIES 20
> -static int ip_version = 4;
> +static int ip_version;
>  
>  typedef struct {
>  	char filename[100];
> @@ -542,6 +542,8 @@ int netload(char *buffer, int len, char *args_fs, int alen)
>  	uint8_t own_mac[6];
>  	char *pkt_buffer;
>  
> +	ip_version = 4;
> +
>  	pkt_buffer = SLOF_alloc_mem(MAX_PKT_SIZE);
>  	if (!pkt_buffer) {
>  		puts("ERROR: Unable to allocate memory");



More information about the SLOF mailing list