From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1agd8R-0002Be-4k for mharc-grub-devel@gnu.org; Thu, 17 Mar 2016 14:59:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48319) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agd8N-00024b-PE for grub-devel@gnu.org; Thu, 17 Mar 2016 14:59:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1agd8K-0007sW-JL for grub-devel@gnu.org; Thu, 17 Mar 2016 14:58:59 -0400 Received: from mail-lf0-x234.google.com ([2a00:1450:4010:c07::234]:36509) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agd8K-0007sI-5I for grub-devel@gnu.org; Thu, 17 Mar 2016 14:58:56 -0400 Received: by mail-lf0-x234.google.com with SMTP id d82so3151057lfe.3 for ; Thu, 17 Mar 2016 11:58:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to; bh=KNHUmyQqZmLWQZmgXHlpMXy1rIKYP7/u361lsB5r+ac=; b=QLdq2q+fj0wFNMTsrsoFQvZGboaNkjbBAvrPwBjszBdDz6+Sb9mKAwcc9xFSSNJZUO Ns2PelzqjOCGXgCPDmxeveNhfg8OEuX8/PQ6XMsJTbwbf5WXg+DwG4cpMm2QrFBA2rcZ 4GKlQxbr2Hp8Qpe7DKeGVpVhwkx3kaTyrxk/E70YnXCqpdfAJoh7gagiO1/93lpEejqf 8qmQ1DwydSsK8eN3gK8Az910AUP34A2xm9OCJpjrf8/9UWeFOfqDHOgFGMrYii9LM/KG Kgw6oXkjbNuEWcA0VG2fQm9Tjtjd/Q1z3djzuq3FrhADCBtx//c9s+IPDvJpnHDNQ7Ze YDgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to; bh=KNHUmyQqZmLWQZmgXHlpMXy1rIKYP7/u361lsB5r+ac=; b=LxkIuJpe6z71JuiIImHNb8YnVqDVmZ1jdgGfnFJ6JxboCqwvAgPE2kMm5aMnPZcHs1 ixJ+3EzPKNY75iy/Xlg/zAqvWovDmRhiZSWLs58TsSTcS5colhibRzZOCT5jbC43lH18 Vz/eH61nSA9dPhoaBcCmNhkXfsvpN+o4x/8mibpbOMry4S80Td0QQK1VDVkxAYJy6c9F 3lvCd3xzEUexG7u9mPV3EEdQkiV5xtjDJwL/ckuF6nqQZ5L3brqU/BEGMv39qlUvGX45 Gyf4DqQNEtI7M05jU4JuXJe2GJx3qe//GyEcH4YDf8hPgBqQkllDq4eKWxB1HV6wzoRJ FpzQ== X-Gm-Message-State: AD7BkJK0kLshpEBY4wPecLK51+bhRJelvnBZAT4AHpc6KO8VtN2AXLUqmcS6XolhdPxCyg== X-Received: by 10.25.209.83 with SMTP id i80mr4543619lfg.74.1458241135195; Thu, 17 Mar 2016 11:58:55 -0700 (PDT) Received: from [192.168.1.42] (ppp109-252-76-159.pppoe.spdop.ru. [109.252.76.159]) by smtp.gmail.com with ESMTPSA id do4sm1606676lbc.35.2016.03.17.11.58.53 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 17 Mar 2016 11:58:54 -0700 (PDT) Subject: Re: [PATCH] bootp: set is_def while processing dhcp ack To: Nikunj A Dadhania References: <1458117324-5685-1-git-send-email-nikunj@linux.vnet.ibm.com> <87h9g63ey5.fsf@abhimanyu.in.ibm.com> <87a8lxwrw7.fsf@abhimanyu.in.ibm.com> <877fh1wmwl.fsf@abhimanyu.in.ibm.com> <871t79wl04.fsf@abhimanyu.in.ibm.com> From: Andrei Borzenkov Message-ID: <56EAFE6C.2080701@gmail.com> Date: Thu, 17 Mar 2016 21:58:52 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <871t79wl04.fsf@abhimanyu.in.ibm.com> Content-Type: multipart/mixed; boundary="------------080802020803000801090809" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:4010:c07::234 Cc: The development of GNU GRUB , mpe@ellerman.id.au X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Mar 2016 18:59:01 -0000 This is a multi-part message in MIME format. --------------080802020803000801090809 Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: 8bit 17.03.2016 11:45, Nikunj A Dadhania пишет: > Andrei Borzenkov writes: > >> On Thu, Mar 17, 2016 at 11:04 AM, Nikunj A Dadhania >> wrote: >>> net_default_interface=ofnet_net:dhcp >>> net_default_ip=(null) >>> net_default_mac=(null) >>> net_default_server=10.0.2.2 >>> net_ofnet_net_dhcp_boot_file=ubuntu-installer/ppc64el/powerpc-ieee1275/core.elf >>> net_ofnet_net_dhcp_ip=10.0.2.15 >>> net_ofnet_net_dhcp_mac=52:54:00:12:34:56 >> >> >> OK, we probably need to export not only name, but also IP to match >> default case. Could you attach bootp reply packet? > > Attached the pcap file, it has the request as well as the ack. > >> I wonder if anyone ever seen or used net_if_dhcp_server_name variable; >> because net_boot sets interface name to card:dhcp, this actually >> becomes net_card_dhcp_dhcp_server_name. Someone would sure have >> noticed it. > Please test attached patch. It sets net__dhcp_server_ip variable. We probably need to offer programmatic way to iterate through all cards in CLI. But as long as you have single card with known name it should be OK. --------------080802020803000801090809 Content-Type: text/x-patch; name="bootp_server_ip.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="bootp_server_ip.patch" From: Andrei Borzenkov Subject: [PATCH] bootp: export server IP as environment variable --- grub-core/net/bootp.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c index a088244..c70cc09 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -142,6 +142,7 @@ grub_net_configure_by_dhcp_ack (const char *name, grub_net_link_level_address_t hwaddr; struct grub_net_network_level_interface *inter; int mask = -1; + char *server_ip = 0; addr.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4; addr.ipv4 = bp->your_ip; @@ -189,15 +190,27 @@ grub_net_configure_by_dhcp_ack (const char *name, if (size > OFFSET_OF (boot_file, bp)) grub_env_set_net_property (name, "boot_file", bp->boot_file, sizeof (bp->boot_file)); + if (bp->server_ip) + { + server_ip = grub_xasprintf ("%d.%d.%d.%d", + ((grub_uint8_t *) &bp->server_ip)[0], + ((grub_uint8_t *) &bp->server_ip)[1], + ((grub_uint8_t *) &bp->server_ip)[2], + ((grub_uint8_t *) &bp->server_ip)[3]); + grub_print_error (); + } + + if (server_ip) + { + grub_env_set_net_property (name, "server_ip", server_ip, grub_strlen (server_ip)); + grub_print_error (); + } + if (is_def) grub_net_default_server = 0; - if (is_def && !grub_net_default_server && bp->server_ip) + if (is_def && !grub_net_default_server && server_ip) { - grub_net_default_server = grub_xasprintf ("%d.%d.%d.%d", - ((grub_uint8_t *) &bp->server_ip)[0], - ((grub_uint8_t *) &bp->server_ip)[1], - ((grub_uint8_t *) &bp->server_ip)[2], - ((grub_uint8_t *) &bp->server_ip)[3]); + grub_net_default_server = grub_strdup (server_ip); grub_print_error (); } @@ -207,13 +220,9 @@ grub_net_configure_by_dhcp_ack (const char *name, grub_env_export ("net_default_interface"); } - if (device && !*device && bp->server_ip) + if (device && !*device && server_ip) { - *device = grub_xasprintf ("tftp,%d.%d.%d.%d", - ((grub_uint8_t *) &bp->server_ip)[0], - ((grub_uint8_t *) &bp->server_ip)[1], - ((grub_uint8_t *) &bp->server_ip)[2], - ((grub_uint8_t *) &bp->server_ip)[3]); + *device = grub_xasprintf ("tftp,%s", server_ip); grub_print_error (); } if (size > OFFSET_OF (server_name, bp) @@ -260,6 +269,7 @@ grub_net_configure_by_dhcp_ack (const char *name, else grub_errno = GRUB_ERR_NONE; + grub_free (server_ip); return inter; } -- tg: (76eac44..) u/bootp-server-ip (depends on: master) --------------080802020803000801090809--