grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] bootp: set is_def while processing dhcp ack


From: Nikunj A Dadhania
Subject: Re: [PATCH] bootp: set is_def while processing dhcp ack
Date: Wed, 16 Mar 2016 15:46:50 +0530
User-agent: Notmuch/0.21 (http://notmuchmail.org) Emacs/24.5.1 (x86_64-redhat-linux-gnu)

Hi Andrei,

Thanks for a quick review.

Andrei Borzenkov <address@hidden> writes:
> On Wed, Mar 16, 2016 at 11:35 AM, Nikunj A Dadhania
> <address@hidden> wrote:
>> While testing netboot on ppc64, found that the grub_net_default_server
>> is not set even when the dhcp response has sent the server IP. This would
>> result in a failure during netbooting with following error:
>>
>> error: no server is specified.
>>
>> This patch sets the is_def variable which would result in setting the
>> grub_net_default_server and then netboot from the server.
>>
>> Signed-off-by: Nikunj A Dadhania <address@hidden>
>> ---
>>  grub-core/net/bootp.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
>> index a088244..74b8b79 100644
>> --- a/grub-core/net/bootp.c
>> +++ b/grub-core/net/bootp.c
>> @@ -278,7 +278,7 @@ grub_net_process_dhcp (struct grub_net_buff *nb,
>>      }
>>    grub_net_configure_by_dhcp_ack (name, card,
>>                                   0, (const struct grub_net_bootp_packet *) 
>> nb->data,
>> -                                 (nb->tail - nb->data), 0, 0, 0);
>> +                                 (nb->tail - nb->data), 1, 0, 0);
>
> That's wrong, sorry. "is default" is intended to be used from initial
> configuration based on information from firmware (i.e. - firmware does
> PXE boot and we configure interface based on PXE packet firmware made
> available for us).

> If you call net_bootp manually,

Thats what we are using in this current case, booting from the disk,
and the grub.cfg has a netboot entry.

menuentry 'Linux dev netboot' --class os {
     insmod net
     insmod ofnet
     insmod tftp

     net_bootp

     echo 'Network status: '
     net_ls_cards
     net_ls_addr
     net_ls_routes

     echo 'Loading Linux ...'
     linux  (tftp)/ubuntu-installer/ppc64el/vmlinux tasks=standard 
pkgsel/language-pack-patterns= pkgsel/install-language-support=false --- quiet
     initrd     (tftp)/ubuntu-installer/ppc64el/initrd.gz
}

> server is stored in environment variable net_<if>_dhcp_server_name;
> you are free to use it as needed, e.g. set $root and $prefix.
>
> Does your platform use PXE or some other protocol for netboot?

Its not exactly same as PXE, below link explains that in detail:

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W51a7ffcf4dfd_4b40_9d82_446ebc23c550/page/Netbooting%20on%20POWER%20-%20An%20Introduction

Basically, a DHCP request is sent and in the DHCP ACK, we get the
details of client-ip, bootfile (core.elf of grub), server-ip, netmask,
etc. Later tftp is used to get the kernel/initrd images.

During this case everything else gets parsed properly except the
server-ip. Which was under the is_def case.

> We may need to provide platform-specific network configuration
> function that understands how to fetch information from firmware.

This information is not there in the firmware. Its there in the DHCP-ACK
packet. When the firmware does the netboot, we have most of the
information encoded in the device tree and is parsed fine in grub.

In this case we have a disk and one of the entry is to netboot, thats
when it fails.

Regards,
Nikunj




reply via email to

[Prev in Thread] Current Thread [Next in Thread]