From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Zeffertt Subject: Re: [PATCH 0/7] [xen-ocaml-tools.hg] integrate ocaml xenstored with xen-unstable.hg Date: Wed, 10 Jun 2009 16:35:58 +0100 Message-ID: <4A2FD2DE.3050303@eu.citrix.com> References: <49E8A3BF.5080102@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050509070007030207000504" Return-path: In-Reply-To: <49E8A3BF.5080102@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Alex Zeffertt Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------050509070007030207000504 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 > --------------050509070007030207000504 Content-Type: text/plain; name="ocaml-xenstore-stubdom-logging-enable" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ocaml-xenstore-stubdom-logging-enable" 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: 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 +#include #include #include #include #include +#include -#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__ */ --------------050509070007030207000504 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------050509070007030207000504--