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)