aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/ngatm/netnatm/msg/unimsglib.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ngatm/netnatm/msg/unimsglib.h')
-rw-r--r--sys/contrib/ngatm/netnatm/msg/unimsglib.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/sys/contrib/ngatm/netnatm/msg/unimsglib.h b/sys/contrib/ngatm/netnatm/msg/unimsglib.h
new file mode 100644
index 000000000000..f8489dbffc0c
--- /dev/null
+++ b/sys/contrib/ngatm/netnatm/msg/unimsglib.h
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 1996-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>
+ *
+ * $Begemot: libunimsg/netnatm/msg/unimsglib.h,v 1.6 2004/07/08 08:22:07 brandt Exp $
+ */
+#ifndef _NETNATM_MSG_UNIMSGLIB_H_
+#define _NETNATM_MSG_UNIMSGLIB_H_
+
+#include <netnatm/msg/uni_config.h>
+
+struct uni_msg;
+
+enum uni_ierr_type {
+ UNI_IERR_UNK, /* unknown IE */
+ UNI_IERR_LEN, /* length error */
+ UNI_IERR_BAD, /* content error */
+ UNI_IERR_ACC, /* access element content error */
+ UNI_IERR_MIS, /* mandatory IE missing (not used here) */
+};
+
+struct uni_ierr {
+ enum uni_ierr_type err; /* what error */
+ enum uni_ieact act; /* the action indicator */
+ u_int ie:8; /* the ie type */
+ u_int man:1; /* mandatory flag */
+ u_int epref:1;/* Q.2971 9.5.3.2.1 low-pri epref */
+};
+
+/*
+ * Context buffer. Needed to reduce number of arguments to routines.
+ */
+struct unicx {
+ /*
+ * globals for error handling
+ */
+ u_int errcnt; /* number of bad IEs */
+ struct uni_ierr err[UNI_MAX_ERRIE]; /* the errors */
+
+ int q2932; /* Enable GFP */
+ int pnni; /* Enable PNNI */
+
+ int git_hard; /* do hard check on GIT IE */
+ int bearer_hard; /* do hard check on BEARER IE */
+ int cause_hard; /* do hard check on cause */
+
+ int multiline; /* printing mode */
+ u_int tabsiz; /* tabulation size */
+
+ /*
+ * Internal context of library -- don't touch
+ */
+ struct uni_ie_repeat repeat; /* repeat IE during decoding */
+ enum uni_ietype ielast; /* last IE seen for repeat handling */
+
+ const char *prefix[20];
+ u_int nprefix;
+ int doindent;
+ char *buf;
+ size_t bufsiz;
+ u_int indent; /* indentation */
+ int dont_init;
+};
+
+/*
+ * Functions for all messages
+ */
+void uni_print_cref(char *, size_t, const struct uni_cref *, struct unicx *);
+void uni_print_msghdr(char *, size_t, const struct uni_msghdr *, struct unicx *);
+void uni_print(char *, size_t, const struct uni_all *, struct unicx *);
+void uni_print_msg(char *, size_t, u_int _mtype, const union uni_msgall *,
+ struct unicx *);
+int uni_encode(struct uni_msg *, struct uni_all *, struct unicx *);
+int uni_decode(struct uni_msg *, struct uni_all *, struct unicx *);
+
+int uni_decode_head(struct uni_msg *, struct uni_all *, struct unicx *);
+int uni_decode_body(struct uni_msg *, struct uni_all *, struct unicx *);
+
+int uni_encode_msg_hdr(struct uni_msg *, struct uni_msghdr *, enum uni_msgtype,
+ struct unicx *, int *);
+
+
+/*
+ * Functions for all information elements
+ */
+void uni_print_ie(char *, size_t, enum uni_ietype, const union uni_ieall *,
+ struct unicx *);
+int uni_check_ie(enum uni_ietype, union uni_ieall *, struct unicx *);
+int uni_encode_ie(enum uni_ietype, struct uni_msg *, union uni_ieall *,
+ struct unicx *);
+int uni_decode_ie_hdr(enum uni_ietype *, struct uni_iehdr *, struct uni_msg *,
+ struct unicx *, u_int *);
+int uni_encode_ie_hdr(struct uni_msg *, enum uni_ietype, struct uni_iehdr *,
+ u_int, struct unicx *);
+int uni_decode_ie_body(enum uni_ietype, union uni_ieall *, struct uni_msg *,
+ u_int, struct unicx *);
+
+
+/*
+ * Context handling
+ */
+void uni_initcx(struct unicx *);
+void uni_print_cx(char *, size_t, struct unicx *);
+
+#define UNI_SAVE_IERR(CX, IETYPE, ACT, ERRCODE) \
+ (((CX)->errcnt < UNI_MAX_ERRIE) ? \
+ ((CX)->err[(CX)->errcnt].ie = (IETYPE), \
+ (CX)->err[(CX)->errcnt].act = (ACT), \
+ (CX)->err[(CX)->errcnt].err = (ERRCODE), \
+ (CX)->err[(CX)->errcnt].man = 0, \
+ (CX)->errcnt++, \
+ 1) : 0)
+
+/*
+ * Traffic classification
+ */
+enum uni_traffic_class {
+ UNI_TRAFFIC_CBR1,
+ UNI_TRAFFIC_CBR2,
+ UNI_TRAFFIC_CBR3,
+ UNI_TRAFFIC_rtVBR1,
+ UNI_TRAFFIC_rtVBR2,
+ UNI_TRAFFIC_rtVBR3,
+ UNI_TRAFFIC_rtVBR4,
+ UNI_TRAFFIC_rtVBR5,
+ UNI_TRAFFIC_rtVBR6,
+ UNI_TRAFFIC_nrtVBR1,
+ UNI_TRAFFIC_nrtVBR2,
+ UNI_TRAFFIC_nrtVBR3,
+ UNI_TRAFFIC_nrtVBR4,
+ UNI_TRAFFIC_nrtVBR5,
+ UNI_TRAFFIC_nrtVBR6,
+ UNI_TRAFFIC_ABR,
+ UNI_TRAFFIC_UBR1,
+ UNI_TRAFFIC_UBR2,
+};
+
+/* classify traffic */
+int uni_classify_traffic(const struct uni_ie_bearer *,
+ const struct uni_ie_traffic *,
+ enum uni_traffic_class *, enum uni_traffic_class *,
+ char *, size_t);
+
+#endif