> How about this cmdline syntax:
> 
>         APPEND  #!gpxe; dhcp net0; kernel URL root=...; boot;
> 
> - the '#!gpxe' declares the start of a gPXE script (this will exclude
>   the BOOT_IMAGE=... added by GRUB)
> 
> - the followed ';' declares that the semicolon will be treated as
>   the DELIMITER (think about the '/' in :s/a/b/ for vim)
> 
> - each gPXE must end with the DELIMITER, ie. the last ';' is not
>   optional (this will exclude the BOOT_IMAGE=... appended by PXELinux)
> 
> > I'd really enjoy reading what the gPXE core developer usual suspects
> > have to offer. :)
> 
> The February 12th, 2009 incarnation[1] (not the original January incarnation) 
> used ';' as command delimiter, so I don't disagree with you, there.  Since 
> the boot-loader-appended ' BOOT_IMAGE= ' should fall after the last command 
> (which should do some booting), it would favourably be ignored...  Unless the 
> booting command should fail, of course.
> [1] 
> http://sourceforge.net/mailarchive/message.php?msg_name=F0E5F8699DE1364584CDB894E99713551187F589%40YRDSB5.YRDSB.YRDSB.NET

Yeah that's close to the one I proposed above, except that you missed the point
that the delimiter is actually determined by user input (not hard coded to ';'
in code).

This code block illustrates the exact idea.

+       if ( linux_cmdline ) {                                                  
                                                     
+               char *p, *q, delimiter;                                         
                                                     
+                                                                               
                                                     
+               DBG ( "Found cmdline at %lx: ", linux_cmdline );                
                                                     
+               copy_from_user ( buf, phys_to_user( linux_cmdline ),            
                                                     
+                                0, sizeof ( buf ) );                           
                                                     
+               buf[sizeof ( buf ) - 1] = '\0';                                 
                                                     
+                                                                               
                                                     
+               p = strstr ( buf, "#!gpxe" );                                   
                                                     
+               if ( p ) {                                                      
                                                     
+                       for ( p += 6; *p == ' '; p++ )                          
                                                     
+                               ;                                               
                                                     
+                       delimiter = *p;                                         
                                                     
+                       while ( ( q = strchr ( ++p , delimiter ) ) ) {          
                                                     
+                               *q = '\0';                                      
                                                     
+                               system ( p );                                   
                                                     
+                               p = q;                                          
                                                     
+                       }                                                       
                                                     
+               }                                                               
                                                     
+       }                                                                       
                                                     

> To be honest, concerns around decisions regarding command syntax
> have been blocks against my submissions for initrd+cmdline and gPXE
> CLI/scripting enhancements, historically, as Stefan has just
> confirmed.

Agreed, the cmdline UI syntax is hard to get right.

Thanks,
Fengguang
_______________________________________________
gPXE-devel mailing list
[email protected]
http://etherboot.org/mailman/listinfo/gpxe-devel

Reply via email to