xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: David Scott <dave.scott@eu.citrix.com>
To: xen-devel@lists.xen.org
Cc: David Scott <dave.scott@eu.citrix.com>
Subject: [PATCH 1/3] oxenstored: Re-add ocaml syslog binding
Date: Wed, 20 Mar 2013 10:32:43 +0000	[thread overview]
Message-ID: <1363775565-4367-2-git-send-email-dave.scott@eu.citrix.com> (raw)
In-Reply-To: <1363775565-4367-1-git-send-email-dave.scott@eu.citrix.com>

This was lost in the OCaml xenstored log merge of 10/Oct/2011.

The binding isn't exported as a shared "log" library, instead it is kept
local to xenstored.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
---
 tools/ocaml/xenstored/Makefile       | 13 ++++++++--
 tools/ocaml/xenstored/syslog.ml      | 47 +++++++++++++++++++++++++++++++++++
 tools/ocaml/xenstored/syslog.mli     | 41 ++++++++++++++++++++++++++++++
 tools/ocaml/xenstored/syslog_stubs.c | 48 ++++++++++++++++++++++++++++++++++++
 4 files changed, 147 insertions(+), 2 deletions(-)
 create mode 100644 tools/ocaml/xenstored/syslog.ml
 create mode 100644 tools/ocaml/xenstored/syslog.mli
 create mode 100644 tools/ocaml/xenstored/syslog_stubs.c

diff --git a/tools/ocaml/xenstored/Makefile b/tools/ocaml/xenstored/Makefile
index 3302d57..b18f190 100644
--- a/tools/ocaml/xenstored/Makefile
+++ b/tools/ocaml/xenstored/Makefile
@@ -8,6 +8,11 @@ OCAMLINCLUDE += \
 	-I $(OCAML_TOPLEVEL)/libs/xc \
 	-I $(OCAML_TOPLEVEL)/libs/eventchn
 
+LIBS = syslog.cma syslog.cmxa
+syslog_OBJS = syslog
+syslog_C_OBJS = syslog_stubs
+OCAML_LIBRARY = syslog
+
 OBJS = define \
 	stdext \
 	trie \
@@ -29,9 +34,11 @@ OBJS = define \
 	process \
 	xenstored
 
-INTF = symbol.cmi trie.cmi
+INTF = symbol.cmi trie.cmi syslog.cmi
+
 XENSTOREDLIBS = \
 	unix.cmxa \
+	-ccopt -L -ccopt . syslog.cmxa \
 	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/mmap $(OCAML_TOPLEVEL)/libs/mmap/xenmmap.cmxa \
 	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/eventchn $(OCAML_TOPLEVEL)/libs/eventchn/xeneventchn.cmxa \
 	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xc $(OCAML_TOPLEVEL)/libs/xc/xenctrl.cmxa \
@@ -45,10 +52,12 @@ oxenstored_OBJS = $(OBJS)
 
 OCAML_PROGRAM = oxenstored
 
-all: $(INTF) $(PROGRAMS)
+all: $(INTF) $(LIBS) $(PROGRAMS)
 
 bins: $(PROGRAMS)
 
+libs: $(LIBS)
+
 install: all
 	$(INSTALL_DIR) $(DESTDIR)$(SBINDIR)
 	$(INSTALL_PROG) oxenstored $(DESTDIR)$(SBINDIR)
diff --git a/tools/ocaml/xenstored/syslog.ml b/tools/ocaml/xenstored/syslog.ml
new file mode 100644
index 0000000..abeace7
--- /dev/null
+++ b/tools/ocaml/xenstored/syslog.ml
@@ -0,0 +1,47 @@
+(*
+ * Copyright (C) 2006-2009 Citrix Systems Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *)
+
+type level = Emerg | Alert | Crit | Err | Warning | Notice | Info | Debug
+type options = Cons | Ndelay | Nowait | Odelay | Perror | Pid
+type facility = Auth | Authpriv | Cron | Daemon | Ftp | Kern
+              | Local0 | Local1 | Local2 | Local3
+	      | Local4 | Local5 | Local6 | Local7
+	      | Lpr | Mail | News | Syslog | User | Uucp
+
+external log : facility -> level -> string -> unit = "stub_syslog"
+
+exception Unknown_facility of string
+let facility_of_string s =
+	match s with
+    |"auth"->Auth
+    |"authpriv"->Authpriv
+    |"cron"->Cron
+    |"daemon"->Daemon
+    |"ftp"->Ftp
+    |"kern"->Kern
+    |"local0"->Local0
+    |"local1"->Local1
+    |"local2"->Local2
+    |"local3"->Local3
+    |"local4"->Local4
+    |"local5"->Local5
+    |"local6"->Local6
+    |"local7"->Local7
+    |"lpr"->Lpr
+    |"mail"->Mail
+    |"news"->News
+    |"syslog"->Syslog
+    |"user"->User
+    |"uucp"->Uucp
+		|_-> raise (Unknown_facility s)
diff --git a/tools/ocaml/xenstored/syslog.mli b/tools/ocaml/xenstored/syslog.mli
new file mode 100644
index 0000000..ecac8a1
--- /dev/null
+++ b/tools/ocaml/xenstored/syslog.mli
@@ -0,0 +1,41 @@
+(*
+ * Copyright (C) 2006-2009 Citrix Systems Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *)
+
+type level = Emerg | Alert | Crit | Err | Warning | Notice | Info | Debug
+type facility =
+    Auth
+  | Authpriv
+  | Cron
+  | Daemon
+  | Ftp
+  | Kern
+  | Local0
+  | Local1
+  | Local2
+  | Local3
+  | Local4
+  | Local5
+  | Local6
+  | Local7
+  | Lpr
+  | Mail
+  | News
+  | Syslog
+  | User
+  | Uucp
+
+external log : facility -> level -> string -> unit = "stub_syslog"
+
+
+val facility_of_string : string -> facility
diff --git a/tools/ocaml/xenstored/syslog_stubs.c b/tools/ocaml/xenstored/syslog_stubs.c
new file mode 100644
index 0000000..dd8b9e9
--- /dev/null
+++ b/tools/ocaml/xenstored/syslog_stubs.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2006-2009 Citrix Systems Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+
+#include <syslog.h>
+#include <string.h>
+#include <caml/mlvalues.h>
+#include <caml/memory.h>
+#include <caml/alloc.h>
+#include <caml/custom.h>
+#include <caml/signals.h>
+
+static int __syslog_level_table[] = {
+	LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING,
+	LOG_NOTICE, LOG_INFO, LOG_DEBUG
+};
+
+static int __syslog_facility_table[] = {
+	LOG_AUTH, LOG_AUTHPRIV, LOG_CRON, LOG_DAEMON, LOG_FTP, LOG_KERN,
+	LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3,
+	LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7,
+	LOG_LPR | LOG_MAIL | LOG_NEWS | LOG_SYSLOG | LOG_USER | LOG_UUCP
+};
+
+value stub_syslog(value facility, value level, value msg)
+{
+	CAMLparam3(facility, level, msg);
+	const char *c_msg = strdup(String_val(msg));
+	int c_facility = __syslog_facility_table[Int_val(facility)]
+	               | __syslog_level_table[Int_val(level)];
+
+	caml_enter_blocking_section();
+	syslog(c_facility, "%s", c_msg);
+	caml_leave_blocking_section();
+	
+	free((void*)c_msg);
+	CAMLreturn(Val_unit);
+}
-- 
1.8.1.2

  reply	other threads:[~2013-03-20 10:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-20 10:32 oxenstored: Add support for logging via syslog David Scott
2013-03-20 10:32 ` David Scott [this message]
2013-03-20 10:32 ` [PATCH 2/3] oxenstored: enable logging via syslog, if specified in the config file David Scott
2013-03-20 10:32 ` [PATCH 3/3] oxenstored: Allow oxenstored to use syslog at levels other than Debug David Scott
2013-04-11 11:16 ` oxenstored: Add support for logging via syslog Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1363775565-4367-2-git-send-email-dave.scott@eu.citrix.com \
    --to=dave.scott@eu.citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).