[syslinux:master] hdt: Adding preliminary dump support

syslinux-bot for Erwan Velu erwanaliasr1 at gmail.com
Mon Apr 25 15:27:50 PDT 2011


Commit-ID:  17202942967982adb3679bad68ea93538ba0d867
Gitweb:     http://syslinux.zytor.com/commit/17202942967982adb3679bad68ea93538ba0d867
Author:     Erwan Velu <erwanaliasr1 at gmail.com>
AuthorDate: Fri, 18 Mar 2011 21:49:38 +0100
Committer:  Erwan Velu <erwanaliasr1 at gmail.com>
CommitDate: Fri, 18 Mar 2011 21:49:38 +0100

hdt: Adding preliminary dump support

This commit add the basics for doing a dump command.


---
 com32/hdt/Makefile      |    4 +-
 com32/hdt/hdt-cli-hdt.c |   13 +++++++
 com32/hdt/hdt-cli.h     |    1 +
 com32/hdt/hdt-common.h  |    6 +++-
 com32/hdt/hdt-dump.c    |   89 +++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 110 insertions(+), 3 deletions(-)

diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile
index 40ea3ac..66dd6ed 100644
--- a/com32/hdt/Makefile
+++ b/com32/hdt/Makefile
@@ -19,8 +19,8 @@ topdir = ../..
 include ../MCONFIG
 
 LIBS	   = ../cmenu/libmenu/libmenu.a ../libutil/libutil_com.a \
-	     ../lib/libcom32.a $(LIBGCC)
-CFLAGS    += -I$(com32)/cmenu/libmenu
+	     ../lib/libcom32.a ../libupload/libcom32upload.a $(LIBGCC)
+CFLAGS    += -I$(com32)/cmenu/libmenu -I$(com32)
 
 MODULES	  = hdt.c32
 TESTFILES =
diff --git a/com32/hdt/hdt-cli-hdt.c b/com32/hdt/hdt-cli-hdt.c
index 6506823..e975261 100644
--- a/com32/hdt/hdt-cli-hdt.c
+++ b/com32/hdt/hdt-cli-hdt.c
@@ -250,6 +250,15 @@ static void do_reboot(int argc __unused, char **argv __unused,
     syslinux_reboot(1);
 }
 
+/**
+ * do_dump - dump info
+ **/
+static void do_dump(int argc __unused, char **argv __unused,
+		      struct s_hardware *hardware)
+{
+    dump(hardware);
+}
+
 /* Default hdt mode */
 struct cli_callback_descr list_hdt_default_modules[] = {
     {
@@ -277,6 +286,10 @@ struct cli_callback_descr list_hdt_default_modules[] = {
      .exec = print_history,
      },
     {
+     .name = CLI_DUMP,
+     .exec = do_dump,
+     },
+    {
      .name = NULL,
      .exec = NULL},
 };
diff --git a/com32/hdt/hdt-cli.h b/com32/hdt/hdt-cli.h
index 1329109..68b3315 100644
--- a/com32/hdt/hdt-cli.h
+++ b/com32/hdt/hdt-cli.h
@@ -65,6 +65,7 @@
 #define CLI_ACPI "acpi"
 #define CLI_ENABLE "enable"
 #define CLI_DISABLE "disable"
+#define CLI_DUMP "dump"
 
 typedef enum {
     INVALID_MODE,
diff --git a/com32/hdt/hdt-common.h b/com32/hdt/hdt-common.h
index df7d2c9..c9923bf 100644
--- a/com32/hdt/hdt-common.h
+++ b/com32/hdt/hdt-common.h
@@ -48,10 +48,11 @@
 #include "cpuid.h"
 #include "dmi/dmi.h"
 #include "hdt-ata.h"
-#include "../lib/sys/vesa/vesa.h"
+#include <lib/sys/vesa/vesa.h>
 #include <vpd/vpd.h>
 #include <libansi.h>
 #include <acpi/acpi.h>
+#include <libupload/upload_backend.h>
 
 /* Declare a variable or data structure as unused. */
 #define __unused __attribute__ (( unused ))
@@ -80,6 +81,8 @@
 #define MAX_CLI_LINES 20
 #define MAX_VESA_CLI_LINES 24
 
+struct upload_backend *upload;
+
 /* Defines if the cli is quiet*/
 bool quiet;
 
@@ -236,4 +239,5 @@ int detect_vesa(struct s_hardware *hardware);
 void detect_memory(struct s_hardware *hardware);
 void init_console(struct s_hardware *hardware);
 void detect_hardware(struct s_hardware *hardware);
+void dump(struct s_hardware *hardware);
 #endif
diff --git a/com32/hdt/hdt-dump.c b/com32/hdt/hdt-dump.c
new file mode 100644
index 0000000..285fb3b
--- /dev/null
+++ b/com32/hdt/hdt-dump.c
@@ -0,0 +1,89 @@
+/* ----------------------------------------------------------------------- *
+ *
+ *   Copyright 20011 Erwan Velu - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * -----------------------------------------------------------------------
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "hdt-common.h"
+
+static void compute_filename(struct s_hardware *hardware, char *filename, int size) {
+
+   snprintf(filename,size,"%s/","hdt");
+
+    if (hardware->is_pxe_valid) {
+	    strncat(filename, hardware->pxe.mac_addr, sizeof(hardware->pxe.mac_addr));
+	    strncat(filename, "+", 1);
+    } 
+    
+    if (hardware->is_dmi_valid) {
+	    strncat(filename, remove_spaces(hardware->dmi.system.product_name), sizeof(hardware->dmi.system.manufacturer));
+	    strncat(filename, "+", 1);
+	    strncat(filename, remove_spaces(hardware->dmi.system.manufacturer), sizeof(hardware->dmi.system.product_name));
+    }
+
+    /* We replace the ":" in the filename by some "-"
+     * This will avoid Microsoft FS turning crazy */
+    chrreplace(filename,':','-');
+
+    /* Avoid space to make filename easier to manipulate */
+    chrreplace(filename,' ','_');
+
+}
+
+/**
+ * dump - dump info
+ **/
+void dump(struct s_hardware *hardware)
+{
+    detect_hardware(hardware);
+
+    /* By now, we only support TFTP reporting */
+    upload=&upload_tftp;
+    upload->name="tftp";
+
+    /* The following defines the behavior of the reporting */
+    char *arg[64];
+    char filename[512]={0};
+    compute_filename(hardware, filename, sizeof(filename));
+
+    /* The filename */
+    arg[0] = filename;
+    /* More to come */
+    arg[1] = NULL;
+
+    /* We initiate the cpio to send */
+    cpio_init(upload,(const char **)arg);
+
+    cpio_writefile(upload,"test","test1",4);
+
+    /* We close & flush the file to send */
+    cpio_close(upload);
+    flush_data(upload);
+}



More information about the Syslinux-commits mailing list