All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] [xen-ocaml-tools.hg] integrate ocaml xenstored with xen-unstable.hg
@ 2009-04-17 15:43 Alex Zeffertt
  2009-06-10 15:35 ` Alex Zeffertt
  0 siblings, 1 reply; 2+ messages in thread
From: Alex Zeffertt @ 2009-04-17 15:43 UTC (permalink / raw)
  To: xen-devel

Hi Vincent,

Please consider applying this patchqueue to xen-ocaml-tools.hg.  The purpose of
these patches is to integrate xen-ocaml-tools.hg with xen-unstable.hg.

In more detail: I have a xen-unstable.hg patchqueue which gives the user the
option of selecting xen-ocaml-tools.hg as the source for xenstored in preference
to tools/xenstore.  This is similar to the mechanism we already employ with qemu
where the user may select between the in tree code and a remote repo.

However, for the xen-unstable.hg patchqueue to work I first need these changes
in xen-ocaml-tools.hg.  The main change I have made is to add stubdom support.

Regards,

Alex

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 0/7] [xen-ocaml-tools.hg] integrate ocaml xenstored with xen-unstable.hg
  2009-04-17 15:43 [PATCH 0/7] [xen-ocaml-tools.hg] integrate ocaml xenstored with xen-unstable.hg Alex Zeffertt
@ 2009-06-10 15:35 ` Alex Zeffertt
  0 siblings, 0 replies; 2+ messages in thread
From: Alex Zeffertt @ 2009-06-10 15:35 UTC (permalink / raw)
  To: Alex Zeffertt; +Cc: xen-devel

[-- Attachment #1: Type: text/plain, Size: 1359 bytes --]

Hi,

I'd like to append an 8th patch to this patchqueue.

The attached patch causes all syslog to be redirected to the console when
the ocaml version of xenstore is running in a mini-OS stubdomain.  The console 
messages can be viewed using xenconsole_dump, or with "/etc/init.d/xenstored 
console" which just calls xenconsole_dump with the appropriate parameters.

Without this patch all syslog messages are just lost when the ocaml version of 
xenstore is running in a stubdomain.

Regards,

Alex


Alex Zeffertt wrote:
> Hi Vincent,
> 
> Please consider applying this patchqueue to xen-ocaml-tools.hg.  The purpose of
> these patches is to integrate xen-ocaml-tools.hg with xen-unstable.hg.
> 
> In more detail: I have a xen-unstable.hg patchqueue which gives the user the
> option of selecting xen-ocaml-tools.hg as the source for xenstored in preference
> to tools/xenstore.  This is similar to the mechanism we already employ with qemu
> where the user may select between the in tree code and a remote repo.
> 
> However, for the xen-unstable.hg patchqueue to work I first need these changes
> in xen-ocaml-tools.hg.  The main change I have made is to add stubdom support.
> 
> Regards,
> 
> Alex
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 


[-- Attachment #2: ocaml-xenstore-stubdom-logging-enable --]
[-- Type: text/plain, Size: 5207 bytes --]

Support syslog when running in a stub domain (messages are routed to console).
Without this patch all messages are simply lost when xenstored is compiled into a 
mini-OS stubdomain. 

Signed-off-by: <alex.zeffertt@eu.citrix.com>

diff -r f7972857413a libs/log/log.ml
--- a/libs/log/log.ml	Fri Apr 17 15:11:52 2009 +0100
+++ b/libs/log/log.ml	Thu May 07 11:47:20 2009 +0100
@@ -71,6 +71,7 @@
 
 (** open a syslog logger *)
 let opensyslog k level =
+	Syslog.init "xenstored" [] Syslog.Daemon ; 
 	make (Syslog k) level
 
 (** open a stderr logger *)
@@ -236,7 +237,7 @@
 		| Info  -> Syslog.Info
 		| Warn  -> Syslog.Warning
 		| Error -> Syslog.Err in
-		Syslog.log Syslog.Daemon sys_prio ((construct_string false) ^ "\n")
+		Syslog.log sys_prio ((construct_string false) ^ "\n")
 	| Stream s -> (
 	      match !(s.channel) with
 		| Some c -> write_to_stream c
diff -r f7972857413a libs/log/syslog.ml
--- a/libs/log/syslog.ml	Fri Apr 17 15:11:52 2009 +0100
+++ b/libs/log/syslog.ml	Thu May 07 11:47:20 2009 +0100
@@ -21,6 +21,6 @@
 	      | Local4 | Local5 | Local6 | Local7
 	      | Lpr | Mail | News | Syslog | User | Uucp
 
-(* external init : string -> options list -> facility -> unit = "stub_openlog" *)
-external log : facility -> level -> string -> unit = "stub_syslog"
+external init : string -> options list -> facility -> unit = "stub_openlog"
+external log : level -> string -> unit = "stub_syslog"
 external close : unit -> unit = "stub_closelog"
diff -r f7972857413a libs/log/syslog.mli
--- a/libs/log/syslog.mli	Fri Apr 17 15:11:52 2009 +0100
+++ b/libs/log/syslog.mli	Thu May 07 11:47:20 2009 +0100
@@ -37,5 +37,6 @@
   | Syslog
   | User
   | Uucp
-external log : facility -> level -> string -> unit = "stub_syslog"
+external init : string -> options list -> facility -> unit = "stub_openlog"
+external log : level -> string -> unit = "stub_syslog"
 external close : unit -> unit = "stub_closelog"
diff -r f7972857413a libs/log/syslog_stubs.c
--- a/libs/log/syslog_stubs.c	Fri Apr 17 15:11:52 2009 +0100
+++ b/libs/log/syslog_stubs.c	Thu May 07 11:47:20 2009 +0100
@@ -15,12 +15,36 @@
  */
 
 #include <syslog.h>
+#include <string.h>
 #include <caml/mlvalues.h>
 #include <caml/memory.h>
 #include <caml/alloc.h>
 #include <caml/custom.h>
+#include <caml/fail.h>
 
-#ifndef __MINIOS__
+/* defs needed for mini-os which only implements a subset */
+#ifndef  LOG_AUTHPRIV
+# define LOG_AUTHPRIV LOG_AUTH
+#endif
+#ifndef  LOG_FTP
+# define LOG_FTP      LOG_DAEMON
+#endif
+#ifndef  LOG_LOCAL0
+# define LOG_LOCAL0   LOG_USER
+# define LOG_LOCAL1   LOG_USER
+# define LOG_LOCAL2   LOG_USER
+# define LOG_LOCAL3   LOG_USER
+# define LOG_LOCAL4   LOG_USER
+# define LOG_LOCAL5   LOG_USER
+# define LOG_LOCAL6   LOG_USER
+# define LOG_LOCAL7   LOG_USER
+#endif
+#ifndef  LOG_PERROR
+# define LOG_PERROR   LOG_CONS
+#endif
+#ifndef  LOG_SYSLOG
+# define LOG_SYSLOG   LOG_DAEMON
+#endif
 
 static int __syslog_level_table[] = {
 	LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING,
@@ -38,52 +62,49 @@
 	LOG_LPR | LOG_MAIL | LOG_NEWS | LOG_SYSLOG | LOG_USER | LOG_UUCP
 };
 
-/* According to the openlog manpage the 'openlog' call may take a reference
-   to the 'ident' string and keep it long-term. This means we cannot just pass in
-   an ocaml string which is under the control of the GC. Since we aren't actually
-   calling this function we can just comment it out for the time-being. */
-/*
+static char *__ident = NULL;
+
 value stub_openlog(value ident, value option, value facility)
 {
 	CAMLparam3(ident, option, facility);
 	int c_option;
 	int c_facility;
 
+	/* Duplicate ident string as GC destroys original, but openlog passes pointer to syslog */
+	if (__ident != NULL)
+		caml_failwith("openlog called twice without intervening closelog");
+	if ((__ident = strdup(String_val(ident))) == NULL)
+		caml_failwith("openlog: strdup failed");
+
 	c_option = caml_convert_flag_list(option, __syslog_options_table);
 	c_facility = __syslog_facility_table[Int_val(facility)];
-	openlog(String_val(ident), c_option, c_facility);
+	openlog(__ident, c_option, c_facility);
 	CAMLreturn(Val_unit);
 }
-*/
 
-value stub_syslog(value facility, value level, value msg)
+value stub_syslog(value level, value msg)
 {
-	CAMLparam3(facility, level, msg);
-	int c_facility;
+	CAMLparam2(level, msg);
+	int c_level;
 
-	c_facility = __syslog_facility_table[Int_val(facility)]
-	           | __syslog_level_table[Int_val(level)];
-	syslog(c_facility, "%s", String_val(msg));
+	if (__ident == NULL)
+		caml_failwith("syslog: openlog not called");
+
+	c_level = __syslog_level_table[Int_val(level)];
+	syslog(c_level, "%s", String_val(msg));
 	CAMLreturn(Val_unit);
 }
 
 value stub_closelog(value unit)
 {
 	CAMLparam1(unit);
+
+	if (__ident == NULL)
+		caml_failwith("closelog: openlog not called");
+
 	closelog();
+	free(__ident);
+	__ident = NULL;
+	
 	CAMLreturn(Val_unit);
 }
-
-#else 
-/* MINIOS StubDOM TODO: We need to redirect this to dom0 somehow ... */
-value stub_syslog(value facility, value level, value msg) 
-{
-	CAMLparam3(facility, level, msg);
-	CAMLreturn(Val_unit);
-}
-value stub_closelog(value unit)
-{
-	CAMLparam1(unit);
-	CAMLreturn(Val_unit);
-}
-#endif /* __MINIOS__ */

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-06-10 15:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-17 15:43 [PATCH 0/7] [xen-ocaml-tools.hg] integrate ocaml xenstored with xen-unstable.hg Alex Zeffertt
2009-06-10 15:35 ` Alex Zeffertt

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.