+const char *session_state_str[] = {
+#define _(sym, str) str,
+ foreach_session_state
+#undef _
+};
+
+u8 *
+format_session_state (u8 * s, va_list * args)
+{
+ session_t *ss = va_arg (*args, session_t *);
+
+ if (ss->session_state < SESSION_N_STATES)
+ s = format (s, "%s", session_state_str[ss->session_state]);
+ else
+ s = format (s, "UNKNOWN STATE (%d)", ss->session_state);
+
+ return s;
+}
+
+const char *session_flags_str[] = {
+#define _(sym, str) str,
+ foreach_session_flag
+#undef _
+};
+
+u8 *
+format_session_flags (u8 * s, va_list * args)
+{
+ session_t *ss = va_arg (*args, session_t *);
+ int i, last = -1;
+
+ for (i = 0; i < SESSION_N_FLAGS; i++)
+ if (ss->flags & (1 << i))
+ last = i;
+
+ for (i = 0; i < last; i++)
+ {
+ if (ss->flags & (1 << i))
+ s = format (s, "%s, ", session_flags_str[i]);
+ }
+ if (last >= 0)
+ s = format (s, "%s", session_flags_str[last]);
+
+ return s;
+}
+