[ipxe-devel] New operator islo (is lower)?

Murmansk murmansk at hotmail.com
Mon Feb 6 13:55:39 UTC 2017


Hi,


I'm trying to show different boot options, based on the memory of the computer: PCs with less than 1GB will not be allowed to install some operating systems.


I know that it can be made by sending {memsize} to a web server PHP script, and return the PXE script with the correct boot options. But we have lots of remote sites that use PXE and don't have a local web server in them, nor a good network access to our central servers. So I'm trying to put all the logic inside the PXE boot script.


I looked at the 'iseq' (is equal) command source code, and cloned it into a new command: 'islo' (is lower). It seems to work ok with positive numbers.


I think that it could be interesting to add this operator: with `iseq' and 'islo' you can express any integer comparison.


I copy the 'git diff' here:


diff --git a/src/core/exec.c b/src/core/exec.c
index a13884b..ee19d1b 100644
--- a/src/core/exec.c
+++ b/src/core/exec.c
@@ -549,6 +549,48 @@ struct command iseq_command __command = {
        .exec = iseq_exec,
 };

+/** "islo" options */
+struct islo_options {};
+
+/** "islo" option list */
+static struct option_descriptor islo_opts[] = {};
+
+/** "islo" command descriptor */
+static struct command_descriptor islo_cmd =
+       COMMAND_DESC ( struct islo_options, islo_opts, 2, 2,
+                      "<value1> <value2>" );
+
+/**
+ * "islo" command
+ *
+ * @v argc             Argument count
+ * @v argv             Argument list
+ * @ret rc             Return status code
+ */
+static int islo_exec ( int argc, char **argv ) {
+       struct islo_options opts;
+       unsigned int operand0, operand1;
+       int rc;
+
+       /* Parse options */
+       if ( ( rc = parse_options ( argc, argv, &islo_cmd, &opts ) ) != 0 )
+               return rc;
+
+       if ( ( rc = parse_integer ( argv[optind], &operand0 ) ) != 0 )
+               return rc;
+       if ( ( rc = parse_integer ( argv[optind+1], &operand1 ) ) != 0 )
+               return rc;
+
+       /* Return success if operand0 is lower than operand1 */
+       return ( ( operand0 < operand1 ) ?  0 : -ERANGE );
+}
+
+/** "islo" command */
+struct command islo_command __command = {
+       .name = "islo",
+       .exec = islo_exec,
+};
+
 /** "sleep" options */
 struct sleep_options {};







-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20170206/0a7e7e3e/attachment.htm>


More information about the ipxe-devel mailing list