* [GITGRUB] Support PXE option and new command pxecfg
@ 2009-10-16 14:45 Bean
2009-10-16 15:26 ` Vladimir 'phcoder' Serbinenko
2009-10-16 18:38 ` Robert Millan
0 siblings, 2 replies; 12+ messages in thread
From: Bean @ 2009-10-16 14:45 UTC (permalink / raw)
To: The development of GRUB 2
Hi,
Extends pxe command:
-i (--info) now shows mac and dhcp options
-e (--export) export a dhcp option as grub variable, for example:
pxe -e 150
Set variable PXE_150 to the value of dhcp option 150, you can then use
command like source to load it:
source ${PXE_150}
New command pxecfg, which allows you to run a command based on current ip/mac:
pxecfg /pxe.txt
Here is an example config file:
pxe {
ip {
192 {
168.2 {
command = "echo ip 192.168.2.*"
}
169 {
command = "echo ip 192.169.*.*"
}
command = "echo ip 192.*.*.*"
}
}
mac {
00-0c-29-1a {
command = "echo mac 00-0c-29-1a-*-*"
}
command = "echo mac *-*-*-*-*-*"
}
}
The config file should be self-explaining, you can use \n to specify
multiple line of commands:
command = "linux /vmlinuz\ninitrd /initrd\nboot"
Source is at http://github.com/bean123/grub/, master branch.
--
Bean
gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 14:45 [GITGRUB] Support PXE option and new command pxecfg Bean
@ 2009-10-16 15:26 ` Vladimir 'phcoder' Serbinenko
2009-10-16 16:13 ` Bean
2009-10-16 18:38 ` Robert Millan
1 sibling, 1 reply; 12+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-10-16 15:26 UTC (permalink / raw)
To: The development of GRUB 2
Hello. Could you send this as a patch?
Bean wrote:
> Hi,
>
> Extends pxe command:
>
> -i (--info) now shows mac and dhcp options
> -e (--export) export a dhcp option as grub variable, for example:
>
> pxe -e 150
>
>
Why can't this be exported unconditionally on pxe system startup?
> Set variable PXE_150 to the value of dhcp option 150, you can then use
> command like source to load it:
>
> source ${PXE_150}
>
> New command pxecfg, which allows you to run a command based on current ip/mac:
>
> pxecfg /pxe.txt
>
>
What's wrong with standard if? I would prefer to extend "if" if
necessary rather than having ad-hoc command for every condition (later
is inexpandable)
> Here is an example config file:
>
> pxe {
> ip {
> 192 {
> 168.2 {
> command = "echo ip 192.168.2.*"
> }
>
> 169 {
> command = "echo ip 192.169.*.*"
> }
>
> command = "echo ip 192.*.*.*"
> }
> }
>
> mac {
> 00-0c-29-1a {
> command = "echo mac 00-0c-29-1a-*-*"
> }
>
> command = "echo mac *-*-*-*-*-*"
> }
> }
>
> The config file should be self-explaining, you can use \n to specify
> multiple line of commands:
>
> command = "linux /vmlinuz\ninitrd /initrd\nboot"
>
> Source is at http://github.com/bean123/grub/, master branch.
>
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 15:26 ` Vladimir 'phcoder' Serbinenko
@ 2009-10-16 16:13 ` Bean
2009-10-16 16:47 ` Vladimir 'phcoder' Serbinenko
0 siblings, 1 reply; 12+ messages in thread
From: Bean @ 2009-10-16 16:13 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Oct 16, 2009 at 11:26 PM, Vladimir 'phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> Hello. Could you send this as a patch?
Hi,
This function depends on my menu branch, it can't be applied to svn
head, so patch file is not very useful.
> Bean wrote:
>> Hi,
>>
>> Extends pxe command:
>>
>> -i (--info) now shows mac and dhcp options
>> -e (--export) export a dhcp option as grub variable, for example:
>>
>> pxe -e 150
>>
>>
> Why can't this be exported unconditionally on pxe system startup?
Right, perhaps we can export PXE_IP, PXE_MAC and PXE_150 by default,
but this function is also useful in case we need to use other string
option.
>> Set variable PXE_150 to the value of dhcp option 150, you can then use
>> command like source to load it:
>>
>> source ${PXE_150}
>>
>> New command pxecfg, which allows you to run a command based on current ip/mac:
>>
>> pxecfg /pxe.txt
>>
>>
> What's wrong with standard if? I would prefer to extend "if" if
> necessary rather than having ad-hoc command for every condition (later
> is inexpandable)
IIRC the test command can't compare partial string.
>> Here is an example config file:
>>
>> pxe {
>> ip {
>> 192 {
>> 168.2 {
>> command = "echo ip 192.168.2.*"
>> }
>>
>> 169 {
>> command = "echo ip 192.169.*.*"
>> }
>>
>> command = "echo ip 192.*.*.*"
>> }
>> }
>>
>> mac {
>> 00-0c-29-1a {
>> command = "echo mac 00-0c-29-1a-*-*"
>> }
>>
>> command = "echo mac *-*-*-*-*-*"
>> }
>> }
>>
>> The config file should be self-explaining, you can use \n to specify
>> multiple line of commands:
>>
>> command = "linux /vmlinuz\ninitrd /initrd\nboot"
>>
>> Source is at http://github.com/bean123/grub/, master branch.
>>
>>
>
>
> --
> Regards
> Vladimir 'phcoder' Serbinenko
> Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Bean
gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 16:13 ` Bean
@ 2009-10-16 16:47 ` Vladimir 'phcoder' Serbinenko
2009-10-16 17:20 ` Bean
0 siblings, 1 reply; 12+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-10-16 16:47 UTC (permalink / raw)
To: The development of GRUB 2
Bean wrote:
> On Fri, Oct 16, 2009 at 11:26 PM, Vladimir 'phcoder' Serbinenko
> <phcoder@gmail.com> wrote:
>
>> Hello. Could you send this as a patch?
>>
>
> Hi,
>
> This function depends on my menu branch, it can't be applied to svn
> head, so patch file is not very useful.
>
>
Could you explain me why PXE depends on menu?
>> Bean wrote:
>>
>>> Hi,
>>>
>>> Extends pxe command:
>>>
>>> -i (--info) now shows mac and dhcp options
>>> -e (--export) export a dhcp option as grub variable, for example:
>>>
>>> pxe -e 150
>>>
>>>
>>>
>> Why can't this be exported unconditionally on pxe system startup?
>>
>
> Right, perhaps we can export PXE_IP, PXE_MAC and PXE_150 by default,
> but this function is also useful in case we need to use other string
> option.
>
>
Is it possible just enumerate all available options and export them to
PXE.<option name> similarly to how we treat FreeBSD environment
>>> Set variable PXE_150 to the value of dhcp option 150, you can then use
>>> command like source to load it:
>>>
>>> source ${PXE_150}
>>>
>>> New command pxecfg, which allows you to run a command based on current ip/mac:
>>>
>>> pxecfg /pxe.txt
>>>
>>>
>>>
>> What's wrong with standard if? I would prefer to extend "if" if
>> necessary rather than having ad-hoc command for every condition (later
>> is inexpandable)
>>
>
> IIRC the test command can't compare partial string.
>
>
We need an improvement to test command then. What about having
test <string> -regexp <regexp>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 16:47 ` Vladimir 'phcoder' Serbinenko
@ 2009-10-16 17:20 ` Bean
2009-10-16 17:30 ` Vladimir 'phcoder' Serbinenko
0 siblings, 1 reply; 12+ messages in thread
From: Bean @ 2009-10-16 17:20 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Oct 17, 2009 at 12:47 AM, Vladimir 'phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> Bean wrote:
>> On Fri, Oct 16, 2009 at 11:26 PM, Vladimir 'phcoder' Serbinenko
>> <phcoder@gmail.com> wrote:
>>
>>> Hello. Could you send this as a patch?
>>>
>>
>> Hi,
>>
>> This function depends on my menu branch, it can't be applied to svn
>> head, so patch file is not very useful.
>>
>>
> Could you explain me why PXE depends on menu?
Hi,
The pxecfg command use the the same config file parser as menu.
>>> Bean wrote:
>>>
>>>> Hi,
>>>>
>>>> Extends pxe command:
>>>>
>>>> -i (--info) now shows mac and dhcp options
>>>> -e (--export) export a dhcp option as grub variable, for example:
>>>>
>>>> pxe -e 150
>>>>
>>>>
>>>>
>>> Why can't this be exported unconditionally on pxe system startup?
>>>
>>
>> Right, perhaps we can export PXE_IP, PXE_MAC and PXE_150 by default,
>> but this function is also useful in case we need to use other string
>> option.
>>
>>
> Is it possible just enumerate all available options and export them to
> PXE.<option name> similarly to how we treat FreeBSD environment
Most DHCP option are binary format, only string option can be exported
as variable.
>>>> Set variable PXE_150 to the value of dhcp option 150, you can then use
>>>> command like source to load it:
>>>>
>>>> source ${PXE_150}
>>>>
>>>> New command pxecfg, which allows you to run a command based on current ip/mac:
>>>>
>>>> pxecfg /pxe.txt
>>>>
>>>>
>>>>
>>> What's wrong with standard if? I would prefer to extend "if" if
>>> necessary rather than having ad-hoc command for every condition (later
>>> is inexpandable)
>>>
>>
>> IIRC the test command can't compare partial string.
>>
>>
> We need an improvement to test command then. What about having
> test <string> -regexp <regexp>
I think that's a little overkill, regular expression parser can be
quite complex.
--
Bean
gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 17:20 ` Bean
@ 2009-10-16 17:30 ` Vladimir 'phcoder' Serbinenko
2009-10-16 21:05 ` Felix Zielcke
2009-10-16 21:13 ` Robert Millan
0 siblings, 2 replies; 12+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-10-16 17:30 UTC (permalink / raw)
To: The development of GRUB 2
Bean wrote:
> On Sat, Oct 17, 2009 at 12:47 AM, Vladimir 'phcoder' Serbinenko
> <phcoder@gmail.com> wrote:
>
>> Bean wrote:
>>
>>> On Fri, Oct 16, 2009 at 11:26 PM, Vladimir 'phcoder' Serbinenko
>>> <phcoder@gmail.com> wrote:
>>>
>>>
>>>> Hello. Could you send this as a patch?
>>>>
>>>>
>>> Hi,
>>>
>>> This function depends on my menu branch, it can't be applied to svn
>>> head, so patch file is not very useful.
>>>
>>>
>>>
>> Could you explain me why PXE depends on menu?
>>
>
> Hi,
>
> The pxecfg command use the the same config file parser as menu.
>
Could you perhaps send only the part without pxecfg then?
>
>>>> Bean wrote:
>>>>
>>>>
>>>>> Hi,
>>>>>
>>>>> Extends pxe command:
>>>>>
>>>>> -i (--info) now shows mac and dhcp options
>>>>> -e (--export) export a dhcp option as grub variable, for example:
>>>>>
>>>>> pxe -e 150
>>>>>
>>>>>
>>>>>
>>>>>
>>>> Why can't this be exported unconditionally on pxe system startup?
>>>>
>>>>
>>> Right, perhaps we can export PXE_IP, PXE_MAC and PXE_150 by default,
>>> but this function is also useful in case we need to use other string
>>> option.
>>>
>>>
>>>
>> Is it possible just enumerate all available options and export them to
>> PXE.<option name> similarly to how we treat FreeBSD environment
>>
>
> Most DHCP option are binary format, only string option can be exported
> as variable.
>
>
We can export these ones as hex
>>>>> Set variable PXE_150 to the value of dhcp option 150, you can then use
>>>>> command like source to load it:
>>>>>
>>>>> source ${PXE_150}
>>>>>
>>>>> New command pxecfg, which allows you to run a command based on current ip/mac:
>>>>>
>>>>> pxecfg /pxe.txt
>>>>>
>>>>>
>>>>>
>>>>>
>>>> What's wrong with standard if? I would prefer to extend "if" if
>>>> necessary rather than having ad-hoc command for every condition (later
>>>> is inexpandable)
>>>>
>>>>
>>> IIRC the test command can't compare partial string.
>>>
>>>
>>>
>> We need an improvement to test command then. What about having
>> test <string> -regexp <regexp>
>>
>
> I think that's a little overkill, regular expression parser can be
> quite complex.
>
>
We don't need to reinvent the wheel. We can import regexp parser from
GNU sed
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 14:45 [GITGRUB] Support PXE option and new command pxecfg Bean
2009-10-16 15:26 ` Vladimir 'phcoder' Serbinenko
@ 2009-10-16 18:38 ` Robert Millan
1 sibling, 0 replies; 12+ messages in thread
From: Robert Millan @ 2009-10-16 18:38 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Oct 16, 2009 at 10:45:08PM +0800, Bean wrote:
>
> Source is at http://github.com/bean123/grub/, master branch.
Please could you attach it?
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 17:30 ` Vladimir 'phcoder' Serbinenko
@ 2009-10-16 21:05 ` Felix Zielcke
2009-10-16 21:13 ` Robert Millan
1 sibling, 0 replies; 12+ messages in thread
From: Felix Zielcke @ 2009-10-16 21:05 UTC (permalink / raw)
To: The development of GRUB 2
Am Freitag, den 16.10.2009, 19:30 +0200 schrieb Vladimir 'phcoder'
Serbinenko:
> >> We need an improvement to test command then. What about having
> >> test <string> -regexp <regexp>
> >>
> >
> > I think that's a little overkill, regular expression parser can be
> > quite complex.
> >
> >
> We don't need to reinvent the wheel. We can import regexp parser from
> GNU sed
Would it be really that useful to have full regexp support inside GRUB?
I can't currently imagine a case where I'd use that.
Shouldn't be just normal shell wildcards (? and *) be enough?
--
Felix Zielcke
Proud Debian Maintainer and GNU GRUB developer
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 17:30 ` Vladimir 'phcoder' Serbinenko
2009-10-16 21:05 ` Felix Zielcke
@ 2009-10-16 21:13 ` Robert Millan
2009-10-19 9:02 ` Bean
1 sibling, 1 reply; 12+ messages in thread
From: Robert Millan @ 2009-10-16 21:13 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Oct 16, 2009 at 07:30:03PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> We don't need to reinvent the wheel. We can import regexp parser from
> GNU sed
I think there's one in GNU libc too (see regcomp()).
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-16 21:13 ` Robert Millan
@ 2009-10-19 9:02 ` Bean
2009-10-20 10:21 ` Robert Millan
0 siblings, 1 reply; 12+ messages in thread
From: Bean @ 2009-10-19 9:02 UTC (permalink / raw)
To: The development of GRUB 2
Hi,
Update:
Now pxe fs exports PXE_MAC and PXE_IP on startup.
pxecfg can support multiple files, and the syntax is changed a bit:
ip {
192 {
168.2 {
command = "echo ip 192.168.2.*"
}
169 {
command = "echo ip 192.169.*.*"
}
command = "echo ip 192.*.*.*"
}
}
mac {
00-0c-29-1a {
command = "echo mac 00-0c-29-1a-*-*"
}
command = "echo mac *-*-*-*-*-*"
}
The top level pxe node is removed, and you can have multiple ip or mac section.
--
Bean
gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-19 9:02 ` Bean
@ 2009-10-20 10:21 ` Robert Millan
2009-10-20 10:51 ` Bean
0 siblings, 1 reply; 12+ messages in thread
From: Robert Millan @ 2009-10-20 10:21 UTC (permalink / raw)
To: The development of GRUB 2
On Mon, Oct 19, 2009 at 05:02:13PM +0800, Bean wrote:
> Hi,
>
> Update:
>
> Now pxe fs exports PXE_MAC and PXE_IP on startup.
Hi Bean,
Are you going to provide a patch?
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [GITGRUB] Support PXE option and new command pxecfg
2009-10-20 10:21 ` Robert Millan
@ 2009-10-20 10:51 ` Bean
0 siblings, 0 replies; 12+ messages in thread
From: Bean @ 2009-10-20 10:51 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 437 bytes --]
On Tue, Oct 20, 2009 at 6:21 PM, Robert Millan <rmh@aybabtu.com> wrote:
> On Mon, Oct 19, 2009 at 05:02:13PM +0800, Bean wrote:
>> Hi,
>>
>> Update:
>>
>> Now pxe fs exports PXE_MAC and PXE_IP on startup.
>
> Hi Bean,
>
> Are you going to provide a patch?
Hi,
Here is it, the command pxecfg is skipped as it depends on my menu system.
--
Bean
gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/
[-- Attachment #2: pxe.diff --]
[-- Type: application/octet-stream, Size: 6143 bytes --]
diff --git a/commands/i386/pc/pxecmd.c b/commands/i386/pc/pxecmd.c
index df53870..0521f1a 100644
--- a/commands/i386/pc/pxecmd.c
+++ b/commands/i386/pc/pxecmd.c
@@ -19,14 +19,16 @@
#include <grub/dl.h>
#include <grub/err.h>
+#include <grub/env.h>
#include <grub/misc.h>
#include <grub/machine/pxe.h>
#include <grub/extcmd.h>
static const struct grub_arg_option options[] =
-{
+ {
{"info", 'i', 0, "show PXE information.", 0, 0},
{"bsize", 'b', 0, "set PXE block size", 0, ARG_TYPE_INT},
+ {"export", 'e', 0, "export PXE option.", 0, ARG_TYPE_INT},
{"unload", 'u', 0, "unload PXE stack.", 0, 0},
{0, 0, 0, 0, 0, 0}
};
@@ -44,6 +46,52 @@ print_ip (grub_uint32_t ip)
grub_printf ("%d", ip);
}
+static void
+print_options (void)
+{
+ grub_uint8_t *p, *start;
+
+ p = start = (grub_uint8_t *) &grub_pxe_bootinfo.vendor.v.flags;
+ while ((*p) && (p - start < GRUB_PXE_BOOTP_DHCPVEND - 4))
+ {
+ if (*p == 255)
+ break;
+
+ grub_printf (" %d(%d)", *p, *(p + 1));
+ p += *(p + 1) + 2;
+ }
+}
+
+static void
+export_option (int num)
+{
+ grub_uint8_t *p, *start;
+
+ p = start = (grub_uint8_t *) &grub_pxe_bootinfo.vendor.v.flags;
+ while ((*p) && (p - start < GRUB_PXE_BOOTP_DHCPVEND - 4))
+ {
+ if (*p == 255)
+ break;
+
+ if (*p == num)
+ {
+ char name[10], c;
+ int len;
+
+ grub_sprintf (name, "PXE_%d", num);
+ p += 2;
+ len = *(p - 1);
+ c = p[len];
+ p[len] = 0;
+ grub_env_set (name, (char *) p);
+ p[len] = c;
+ break;
+ }
+
+ p += *(p + 1) + 2;
+ }
+}
+
static grub_err_t
grub_cmd_pxe (grub_extcmd_t cmd, int argc __attribute__ ((unused)),
char **args __attribute__ ((unused)))
@@ -59,26 +107,43 @@ grub_cmd_pxe (grub_extcmd_t cmd, int argc __attribute__ ((unused)),
size = grub_strtoul (state[1].arg, 0, 0);
if (size < GRUB_PXE_MIN_BLKSIZE)
- size = GRUB_PXE_MIN_BLKSIZE;
+ size = GRUB_PXE_MIN_BLKSIZE;
else if (size > GRUB_PXE_MAX_BLKSIZE)
- size = GRUB_PXE_MAX_BLKSIZE;
+ size = GRUB_PXE_MAX_BLKSIZE;
grub_pxe_blksize = size;
}
if (state[0].set)
{
+ char *mac;
+
grub_printf ("blksize : %d\n", grub_pxe_blksize);
grub_printf ("client ip : ");
- print_ip (grub_pxe_your_ip);
+ print_ip (grub_pxe_bootinfo.your_ip);
grub_printf ("\nserver ip : ");
- print_ip (grub_pxe_server_ip);
+ print_ip (grub_pxe_bootinfo.server_ip);
grub_printf ("\ngateway ip : ");
- print_ip (grub_pxe_gateway_ip);
+ print_ip (grub_pxe_bootinfo.gateway_ip);
+
+ mac = grub_env_get ("PXE_MAC");
+ if (mac)
+ grub_printf ("\nMAC : %s", mac);
+
+ grub_printf ("\noptions:");
+ print_options ();
grub_printf ("\n");
}
if (state[2].set)
+ {
+ int num;
+
+ num = grub_strtoul (state[2].arg, 0, 0);
+ export_option (num);
+ }
+
+ if (state[3].set)
grub_pxe_unload ();
return 0;
@@ -89,7 +154,7 @@ static grub_extcmd_t cmd;
GRUB_MOD_INIT(pxecmd)
{
cmd = grub_register_extcmd ("pxe", grub_cmd_pxe, GRUB_COMMAND_FLAG_BOTH,
- "pxe [-i|-b|-u]",
+ "pxe [OPTIONS]",
"Command to control the PXE device.", options);
}
diff --git a/fs/i386/pc/pxe.c b/fs/i386/pc/pxe.c
index 4032e12..4802df4 100644
--- a/fs/i386/pc/pxe.c
+++ b/fs/i386/pc/pxe.c
@@ -20,6 +20,7 @@
#include <grub/dl.h>
#include <grub/fs.h>
#include <grub/mm.h>
+#include <grub/env.h>
#include <grub/disk.h>
#include <grub/file.h>
#include <grub/misc.h>
@@ -28,16 +29,19 @@
#include <grub/machine/pxe.h>
#include <grub/machine/memory.h>
#define SEGMENT(x) ((x) >> 4)
#define OFFSET(x) ((x) & 0xF)
#define SEGOFS(x) ((SEGMENT(x) << 16) + OFFSET(x))
#define LINEAR(x) (void *) (((x >> 16) <<4) + (x & 0xFFFF))
struct grub_pxenv *grub_pxe_pxenv;
-grub_uint32_t grub_pxe_your_ip;
-grub_uint32_t grub_pxe_server_ip;
-grub_uint32_t grub_pxe_gateway_ip;
int grub_pxe_blksize = GRUB_PXE_MIN_BLKSIZE;
+struct grub_pxenv_boot_player grub_pxe_bootinfo;
static grub_file_t curr_file = 0;
@@ -131,8 +134,8 @@ grub_pxefs_open (struct grub_file *file, const char *name)
curr_file = 0;
}
- c.c1.server_ip = grub_pxe_server_ip;
- c.c1.gateway_ip = grub_pxe_gateway_ip;
+ c.c1.server_ip = grub_pxe_bootinfo.server_ip;
+ c.c1.gateway_ip = grub_pxe_bootinfo.gateway_ip;
grub_strcpy ((char *)&c.c1.filename[0], name);
grub_pxe_call (GRUB_PXENV_TFTP_GET_FSIZE, &c.c1);
if (c.c1.status)
@@ -199,10 +202,10 @@ grub_pxefs_read (grub_file_t file, char *buf, grub_size_t len)
struct grub_pxenv_tftp_open o;
if (curr_file != 0)
- grub_pxe_call (GRUB_PXENV_TFTP_CLOSE, &o);
+ grub_pxe_call (GRUB_PXENV_TFTP_CLOSE, &o);
- o.server_ip = grub_pxe_server_ip;
- o.gateway_ip = grub_pxe_gateway_ip;
+ o.server_ip = grub_pxe_bootinfo.server_ip;
+ o.gateway_ip = grub_pxe_bootinfo.gateway_ip;
grub_strcpy ((char *)&o.filename[0], data->filename);
o.tftp_port = grub_cpu_to_be16 (GRUB_PXE_TFTP_PORT);
o.packet_size = data->block_size;
@@ -270,6 +273,36 @@ static struct grub_fs grub_pxefs_fs =
};
static void
+export_variable (struct grub_pxenv_boot_player *bp)
+{
+ char buf[6 * 3], *p;
+ grub_uint8_t *s;
+ int i;
+
+ p = buf;
+ s = (grub_uint8_t *) &bp->mac_addr;
+ for (i = 0; i < 6; i++)
+ {
+ grub_sprintf (p, "%02x", *(s++));
+ p += 3;
+ *(p - 1) = '-';
+ }
+ *(p - 1) = 0;
+ grub_env_set ("PXE_MAC", buf);
+
+ p = buf;
+ s = (grub_uint8_t *) &bp->your_ip;
+ for (i = 0; i < 4; i++)
+ {
+ grub_sprintf (p, "%d", *(s++));
+ p += grub_strlen (p) + 1;
+ *(p - 1) = '.';
+ }
+ *(p - 1) = 0;
+ grub_env_set ("PXE_IP", buf);
+}
+
+static void
grub_pxe_detect (void)
{
struct grub_pxenv *pxenv;
@@ -288,10 +321,8 @@ grub_pxe_detect (void)
return;
bp = LINEAR (ci.buffer);
-
- grub_pxe_your_ip = bp->your_ip;
- grub_pxe_server_ip = bp->server_ip;
- grub_pxe_gateway_ip = bp->gateway_ip;
+ export_variable (bp);
+ grub_memcpy (&grub_pxe_bootinfo, bp, sizeof (grub_pxe_bootinfo));
grub_pxe_pxenv = pxenv;
}
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2009-10-20 10:51 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-16 14:45 [GITGRUB] Support PXE option and new command pxecfg Bean
2009-10-16 15:26 ` Vladimir 'phcoder' Serbinenko
2009-10-16 16:13 ` Bean
2009-10-16 16:47 ` Vladimir 'phcoder' Serbinenko
2009-10-16 17:20 ` Bean
2009-10-16 17:30 ` Vladimir 'phcoder' Serbinenko
2009-10-16 21:05 ` Felix Zielcke
2009-10-16 21:13 ` Robert Millan
2009-10-19 9:02 ` Bean
2009-10-20 10:21 ` Robert Millan
2009-10-20 10:51 ` Bean
2009-10-16 18:38 ` Robert Millan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.