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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
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@xxxxxxxxxxxxx>
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__ */
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|