summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ngatm/netnatm/sig/sig_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ngatm/netnatm/sig/sig_print.c')
-rw-r--r--sys/contrib/ngatm/netnatm/sig/sig_print.c622
1 files changed, 622 insertions, 0 deletions
diff --git a/sys/contrib/ngatm/netnatm/sig/sig_print.c b/sys/contrib/ngatm/netnatm/sig/sig_print.c
new file mode 100644
index 0000000..af99612
--- /dev/null
+++ b/sys/contrib/ngatm/netnatm/sig/sig_print.c
@@ -0,0 +1,622 @@
+/*
+ * Copyright (c) 2002-2003
+ * Fraunhofer Institute for Open Communication Systems (FhG Fokus).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Author: Hartmut Brandt <harti@freebsd.org>
+ * Kendy Kutzner <kutzner@fokus.fraunhofer.de>
+ *
+ * $Begemot: libunimsg/netnatm/sig/sig_print.c,v 1.6 2004/08/05 07:11:02 brandt Exp $
+ */
+
+#include <sys/types.h>
+#ifdef _KERNEL
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/libkern.h>
+#include <machine/stdarg.h>
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#endif
+
+#include <netnatm/saal/sscfu.h>
+#include <netnatm/msg/uni_hdr.h>
+#include <netnatm/msg/unistruct.h>
+#include <netnatm/msg/unimsglib.h>
+#include <netnatm/msg/uniprint.h>
+#include <netnatm/sig/uni.h>
+#include <netnatm/sig/unisig.h>
+#include <netnatm/sig/unidef.h>
+
+const char *
+uni_strerr(u_int err)
+{
+ static const char *const errstr[] = {
+#define DEF(NAME, VAL, STR) [UNIAPI_##NAME] = STR,
+UNIAPI_DEF_ERRORS(DEF)
+#undef DEF
+ };
+ static char buf[100];
+
+ if (err >= sizeof(errstr)/sizeof(errstr[0]) || errstr[err] == NULL) {
+ sprintf(buf, "Unknown error %u", err);
+ return (buf);
+ }
+ return (errstr[err]);
+}
+
+#define D(M) [M] = #M
+static const char *const msgs[] = {
+ D(UNIAPI_ERROR),
+ D(UNIAPI_CALL_CREATED),
+ D(UNIAPI_CALL_DESTROYED),
+ D(UNIAPI_PARTY_CREATED),
+ D(UNIAPI_PARTY_DESTROYED),
+ D(UNIAPI_LINK_ESTABLISH_request),
+ D(UNIAPI_LINK_ESTABLISH_confirm),
+ D(UNIAPI_LINK_RELEASE_request),
+ D(UNIAPI_LINK_RELEASE_confirm),
+ D(UNIAPI_RESET_request),
+ D(UNIAPI_RESET_confirm),
+ D(UNIAPI_RESET_indication),
+ D(UNIAPI_RESET_ERROR_indication),
+ D(UNIAPI_RESET_response),
+ D(UNIAPI_RESET_ERROR_response),
+ D(UNIAPI_RESET_STATUS_indication),
+ D(UNIAPI_SETUP_request),
+ D(UNIAPI_SETUP_indication),
+ D(UNIAPI_SETUP_response),
+ D(UNIAPI_SETUP_confirm),
+ D(UNIAPI_SETUP_COMPLETE_indication),
+ D(UNIAPI_SETUP_COMPLETE_request),
+ D(UNIAPI_ALERTING_request),
+ D(UNIAPI_ALERTING_indication),
+ D(UNIAPI_PROCEEDING_request),
+ D(UNIAPI_PROCEEDING_indication),
+ D(UNIAPI_RELEASE_request),
+ D(UNIAPI_RELEASE_indication),
+ D(UNIAPI_RELEASE_response),
+ D(UNIAPI_RELEASE_confirm),
+ D(UNIAPI_NOTIFY_request),
+ D(UNIAPI_NOTIFY_indication),
+ D(UNIAPI_STATUS_indication),
+ D(UNIAPI_STATUS_ENQUIRY_request),
+ D(UNIAPI_ADD_PARTY_request),
+ D(UNIAPI_ADD_PARTY_indication),
+ D(UNIAPI_PARTY_ALERTING_request),
+ D(UNIAPI_PARTY_ALERTING_indication),
+ D(UNIAPI_ADD_PARTY_ACK_request),
+ D(UNIAPI_ADD_PARTY_ACK_indication),
+ D(UNIAPI_ADD_PARTY_REJ_request),
+ D(UNIAPI_ADD_PARTY_REJ_indication),
+ D(UNIAPI_DROP_PARTY_request),
+ D(UNIAPI_DROP_PARTY_indication),
+ D(UNIAPI_DROP_PARTY_ACK_request),
+ D(UNIAPI_DROP_PARTY_ACK_indication),
+ D(UNIAPI_ABORT_CALL_request),
+};
+#undef D
+
+void
+uni_print_api(char *buf, size_t bufsiz, u_int type, u_int cookie,
+ const void *msg, struct unicx *cx)
+{
+ int old_dont_init = cx->dont_init;
+
+ uni_print_init(buf, bufsiz, cx);
+ cx->dont_init = 1;
+
+ if (type >= sizeof(msgs) / sizeof(msgs[0]) || msgs[type] == NULL) {
+ uni_print_flag("UNIAPI_UNKNOWN", cx);
+ uni_print_entry(cx, "sig", "%u", type);
+ uni_print_entry(cx, "cookie", "%u", cookie);
+ goto out;
+ }
+
+ uni_print_flag(msgs[type], cx);
+ uni_print_entry(cx, "cookie", "%u", cookie);
+ cx->indent++;
+
+ switch (type) {
+
+ case UNIAPI_ERROR:
+ {
+ const struct uniapi_error *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_entry(cx, "reason", "%s", uni_strerr(api->reason));
+ uni_print_entry(cx, "state", "U%u", api->state);
+ break;
+ }
+
+ case UNIAPI_CALL_CREATED:
+ {
+ const struct uniapi_call_created *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ break;
+ }
+
+ case UNIAPI_CALL_DESTROYED:
+ {
+ const struct uniapi_call_destroyed *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ break;
+ }
+
+ case UNIAPI_PARTY_CREATED:
+ {
+ const struct uniapi_party_created *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_EPREF,
+ (const union uni_ieall *)&api->epref, cx);
+ break;
+ }
+
+ case UNIAPI_PARTY_DESTROYED:
+ {
+ const struct uniapi_party_destroyed *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_EPREF,
+ (const union uni_ieall *)&api->epref, cx);
+ break;
+ }
+
+ case UNIAPI_LINK_ESTABLISH_request:
+ case UNIAPI_LINK_ESTABLISH_confirm:
+ case UNIAPI_LINK_RELEASE_request:
+ case UNIAPI_LINK_RELEASE_confirm:
+ break;
+
+ case UNIAPI_RESET_request:
+ {
+ const struct uniapi_reset_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_RESTART,
+ (const union uni_ieall *)&api->restart, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CONNID,
+ (const union uni_ieall *)&api->restart, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_confirm:
+ {
+ const struct uniapi_reset_confirm *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_RESTART,
+ (const union uni_ieall *)&api->restart, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CONNID,
+ (const union uni_ieall *)&api->restart, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_indication:
+ {
+ const struct uniapi_reset_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_RESTART,
+ (const union uni_ieall *)&api->restart, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CONNID,
+ (const union uni_ieall *)&api->restart, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_ERROR_indication:
+ {
+ const struct uniapi_reset_error_indication *api = msg;
+ static const struct uni_print_tbl reason[] = {
+#define DEF(NAME, VALUE, STR) { STR, VALUE },
+ UNIAPI_DEF_RESET_ERRORS(DEF)
+#undef DEF
+ { NULL, 0 }
+ };
+ static const struct uni_print_tbl source[] = {
+ { "start", 0 },
+ { "respond", 1 },
+ { NULL, 0 }
+ };
+
+ uni_print_eol(cx);
+ uni_print_tbl("source", api->source, source, cx);
+ uni_print_tbl("reason", api->reason, reason, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_response:
+ {
+ const struct uniapi_reset_response *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_RESTART,
+ (const union uni_ieall *)&api->restart, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CONNID,
+ (const union uni_ieall *)&api->restart, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_ERROR_response:
+ {
+ const struct uniapi_reset_error_response *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CAUSE,
+ (const union uni_ieall *)&api->cause, cx);
+ break;
+ }
+
+ case UNIAPI_RESET_STATUS_indication:
+ {
+ const struct uniapi_reset_status_indication *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CALLSTATE,
+ (const union uni_ieall *)&api->callstate, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CAUSE,
+ (const union uni_ieall *)&api->cause, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_request:
+ {
+ const struct uniapi_setup_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_SETUP,
+ (const union uni_msgall *)&api->setup, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_indication:
+ {
+ const struct uniapi_setup_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_SETUP,
+ (const union uni_msgall *)&api->setup, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_response:
+ {
+ const struct uniapi_setup_response *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CONNECT,
+ (const union uni_msgall *)&api->connect, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_confirm:
+ {
+ const struct uniapi_setup_confirm *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CONNECT,
+ (const union uni_msgall *)&api->connect, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_COMPLETE_indication:
+ {
+ const struct uniapi_setup_complete_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CONNECT_ACK,
+ (const union uni_msgall *)&api->connect_ack, cx);
+ break;
+ }
+
+ case UNIAPI_SETUP_COMPLETE_request:
+ {
+ const struct uniapi_setup_complete_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CONNECT_ACK,
+ (const union uni_msgall *)&api->connect_ack, cx);
+ break;
+ }
+
+ case UNIAPI_ALERTING_request:
+ {
+ const struct uniapi_alerting_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ALERTING,
+ (const union uni_msgall *)&api->alerting, cx);
+ break;
+ }
+
+ case UNIAPI_ALERTING_indication:
+ {
+ const struct uniapi_alerting_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ALERTING,
+ (const union uni_msgall *)&api->alerting, cx);
+ break;
+ }
+
+ case UNIAPI_PROCEEDING_request:
+ {
+ const struct uniapi_proceeding_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CALL_PROC,
+ (const union uni_msgall *)&api->call_proc, cx);
+ break;
+ }
+
+ case UNIAPI_PROCEEDING_indication:
+ {
+ const struct uniapi_proceeding_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_CALL_PROC,
+ (const union uni_msgall *)&api->call_proc, cx);
+ break;
+ }
+
+ case UNIAPI_RELEASE_request:
+ {
+ const struct uniapi_release_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_RELEASE,
+ (const union uni_msgall *)&api->release, cx);
+ break;
+ }
+
+ case UNIAPI_RELEASE_indication:
+ {
+ const struct uniapi_release_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_RELEASE,
+ (const union uni_msgall *)&api->release, cx);
+ break;
+ }
+
+ case UNIAPI_RELEASE_response:
+ {
+ const struct uniapi_release_response *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_RELEASE_COMPL,
+ (const union uni_msgall *)&api->release_compl, cx);
+ break;
+ }
+ case UNIAPI_RELEASE_confirm:
+ {
+ const struct uniapi_release_confirm *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_RELEASE,
+ (const union uni_msgall *)&api->release, cx);
+ break;
+ }
+
+ case UNIAPI_NOTIFY_request:
+ {
+ const struct uniapi_notify_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_NOTIFY,
+ (const union uni_msgall *)&api->notify, cx);
+ break;
+ }
+
+ case UNIAPI_NOTIFY_indication:
+ {
+ const struct uniapi_notify_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_NOTIFY,
+ (const union uni_msgall *)&api->notify, cx);
+ break;
+ }
+
+ case UNIAPI_STATUS_indication:
+ {
+ const struct uniapi_status_indication *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ uni_print_eol(cx);
+ uni_print_entry(cx, "my_state", "U%u", api->my_state);
+ uni_print_entry(cx, "my_cause", "%s",
+ uni_ie_cause2str(UNI_CODING_ITU, api->my_cause));
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CALLSTATE,
+ (const union uni_ieall *)&api->his_state, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CAUSE,
+ (const union uni_ieall *)&api->his_cause, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_EPREF,
+ (const union uni_ieall *)&api->epref, cx);
+ break;
+ }
+
+ case UNIAPI_STATUS_ENQUIRY_request:
+ {
+ const struct uniapi_status_enquiry_request *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_EPREF,
+ (const union uni_ieall *)&api->epref, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_request:
+ {
+ const struct uniapi_add_party_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY,
+ (const union uni_msgall *)&api->add, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_indication:
+ {
+ const struct uniapi_add_party_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY,
+ (const union uni_msgall *)&api->add, cx);
+ break;
+ }
+
+ case UNIAPI_PARTY_ALERTING_request:
+ {
+ const struct uniapi_party_alerting_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_PARTY_ALERTING,
+ (const union uni_msgall *)&api->alert, cx);
+ break;
+ }
+
+ case UNIAPI_PARTY_ALERTING_indication:
+ {
+ const struct uniapi_party_alerting_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_PARTY_ALERTING,
+ (const union uni_msgall *)&api->alert, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_ACK_request:
+ {
+ const struct uniapi_add_party_ack_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY_ACK,
+ (const union uni_msgall *)&api->ack, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_ACK_indication:
+ {
+ const struct uniapi_add_party_ack_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY_ACK,
+ (const union uni_msgall *)&api->ack, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_REJ_request:
+ {
+ const struct uniapi_add_party_rej_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY_REJ,
+ (const union uni_msgall *)&api->rej, cx);
+ break;
+ }
+
+ case UNIAPI_ADD_PARTY_REJ_indication:
+ {
+ const struct uniapi_add_party_rej_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_ADD_PARTY_REJ,
+ (const union uni_msgall *)&api->rej, cx);
+ break;
+ }
+
+ case UNIAPI_DROP_PARTY_request:
+ {
+ const struct uniapi_drop_party_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_DROP_PARTY,
+ (const union uni_msgall *)&api->drop, cx);
+ break;
+ }
+
+ case UNIAPI_DROP_PARTY_indication:
+ {
+ const struct uniapi_drop_party_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_DROP_PARTY,
+ (const union uni_msgall *)&api->drop, cx);
+ break;
+ }
+
+ case UNIAPI_DROP_PARTY_ACK_request:
+ {
+ const struct uniapi_drop_party_ack_request *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_DROP_PARTY_ACK,
+ (const union uni_msgall *)&api->ack, cx);
+ break;
+ }
+
+ case UNIAPI_DROP_PARTY_ACK_indication:
+ {
+ const struct uniapi_drop_party_ack_indication *api = msg;
+
+ uni_print_eol(cx);
+ uni_print_msg(NULL, 0, UNI_DROP_PARTY,
+ (const union uni_msgall *)&api->drop, cx);
+ uni_print_eol(cx);
+ uni_print_ie(NULL, 0, UNI_IE_CRANKBACK,
+ (const union uni_ieall *)&api->crankback, cx);
+ break;
+ }
+
+ case UNIAPI_ABORT_CALL_request:
+ {
+ const struct uniapi_abort_call_request *api = msg;
+
+ uni_print_cref(NULL, 0, &api->cref, cx);
+ break;
+ }
+ }
+
+ out:
+ cx->dont_init = old_dont_init;
+}
OpenPOWER on IntegriCloud