[Openais] [PATCH 5/9] logsys: add macros to pack/unpack rec_ident

Fabio M. Di Nitto fdinitto at redhat.com
Wed Jun 17 03:53:45 PDT 2009


rec_ident should contain 3 info: log level, subsystem id and
message type.

Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
---
:100644 100644 ea53cac... 5629879... M	include/corosync/engine/logsys.h
 include/corosync/engine/logsys.h |   71 ++++++++++++++++++++++++++++++++------
 1 files changed, 60 insertions(+), 11 deletions(-)

diff --git a/include/corosync/engine/logsys.h b/include/corosync/engine/logsys.h
index ea53cac..5629879 100644
--- a/include/corosync/engine/logsys.h
+++ b/include/corosync/engine/logsys.h
@@ -77,17 +77,20 @@ extern "C" {
  * RECID_LOG indicates a message that should be sent to log. Anything else
  * is stored only in the flight recorder.
  */
-#define LOGSYS_RECID_LOG		UINT_MAX - 1
-#define LOGSYS_RECID_ENTER		UINT_MAX - 2
-#define LOGSYS_RECID_LEAVE		UINT_MAX - 3
-#define LOGSYS_RECID_TRACE1		UINT_MAX - 4
-#define LOGSYS_RECID_TRACE2		UINT_MAX - 5
-#define LOGSYS_RECID_TRACE3		UINT_MAX - 6
-#define LOGSYS_RECID_TRACE4		UINT_MAX - 7
-#define LOGSYS_RECID_TRACE5		UINT_MAX - 8
-#define LOGSYS_RECID_TRACE6		UINT_MAX - 9
-#define LOGSYS_RECID_TRACE7		UINT_MAX - 10
-#define LOGSYS_RECID_TRACE8		UINT_MAX - 11
+
+#define LOGSYS_RECID_MAX		LOGSYS_RECID_RECID_MASK
+
+#define LOGSYS_RECID_LOG		LOGSYS_RECID_MAX - 1
+#define LOGSYS_RECID_ENTER		LOGSYS_RECID_MAX - 2
+#define LOGSYS_RECID_LEAVE		LOGSYS_RECID_MAX - 3
+#define LOGSYS_RECID_TRACE1		LOGSYS_RECID_MAX - 4
+#define LOGSYS_RECID_TRACE2		LOGSYS_RECID_MAX - 5
+#define LOGSYS_RECID_TRACE3		LOGSYS_RECID_MAX - 6
+#define LOGSYS_RECID_TRACE4		LOGSYS_RECID_MAX - 7
+#define LOGSYS_RECID_TRACE5		LOGSYS_RECID_MAX - 8
+#define LOGSYS_RECID_TRACE6		LOGSYS_RECID_MAX - 9
+#define LOGSYS_RECID_TRACE7		LOGSYS_RECID_MAX - 10
+#define LOGSYS_RECID_TRACE8		LOGSYS_RECID_MAX - 11
 
 
 /*
@@ -104,6 +107,52 @@ extern "C" {
 #define LOGSYS_MAX_SUBSYS_COUNT		64
 #define LOGSYS_MAX_SUBSYS_NAMELEN	64
 
+/*
+ * rec_ident explained:
+ *
+ * rec_ident is an unsigned int and carries bitfields information
+ * on subsys_id, log priority (level) and type of message (RECID).
+ *
+ * level values are imported from syslog.h.
+ * At the time of writing it's a 3 bits value (0 to 7).
+ *
+ * subsys_id is any value between 0 and 64 (LOGSYS_MAX_SUBSYS_COUNT)
+ *
+ * RECID identifies the type of message. A set of predefined values
+ * are available via logsys, but other custom values can be defined
+ * by users.
+ *
+ * ----
+ * bitfields:
+ *
+ * 0  - 2 level
+ * 3  - 9 subsysid
+ * 10 - n RECID
+ */
+
+#define LOGSYS_LEVEL_END		3
+#define LOGSYS_SUBSYSID_END		(LOGSYS_LEVEL_END + 7)
+
+#define LOGSYS_RECID_LEVEL_MASK		LOG_PRIMASK
+#define LOGSYS_RECID_SUBSYSID_MASK	((2 << (LOGSYS_SUBSYSID_END - 1)) - \
+					(LOG_PRIMASK + 1))
+#define LOGSYS_RECID_RECID_MASK		(UINT_MAX - \
+					(LOGSYS_RECID_SUBSYSID_MASK + LOG_PRIMASK))
+
+#define LOGSYS_ENCODE_RECID(level,subsysid,recid) \
+	(((recid) << LOGSYS_SUBSYSID_END) | \
+	((subsysid) << LOGSYS_LEVEL_END) | \
+	(level))
+
+#define LOGSYS_DECODE_LEVEL(rec_ident) \
+	((rec_ident) & LOGSYS_RECID_LEVEL_MASK)
+
+#define LOGSYS_DECODE_SUBSYSID(rec_ident) \
+	(((rec_ident) & LOGSYS_RECID_SUBSYSID_MASK) >> LOGSYS_LEVEL_END)
+
+#define LOGSYS_DECODE_RECID(rec_ident) \
+	(((rec_ident) & LOGSYS_RECID_RECID_MASK) >> LOGSYS_SUBSYSID_END)
+
 #ifndef LOGSYS_UTILS_ONLY
 
 extern int _logsys_system_setup(
-- 
1.5.4.3



More information about the Openais mailing list