summaryrefslogtreecommitdiff
path: root/sys/altq/altq_afmap.h
diff options
context:
space:
mode:
authorKenjiro Cho <kjc@cvs.openbsd.org>2001-06-27 05:28:37 +0000
committerKenjiro Cho <kjc@cvs.openbsd.org>2001-06-27 05:28:37 +0000
commite13e0cc15f99577acddb2317a916f349405ee961 (patch)
tree6b866f8e79c8e6b96a779aa877dd9b6559059ba3 /sys/altq/altq_afmap.h
parentc00082e97a3137a461a24364470c06ac571b833e (diff)
import ALTQ, alternate queueing support, from KAME.
ALTQ allows to switch various queueing disciplines on output network interfaces.
Diffstat (limited to 'sys/altq/altq_afmap.h')
-rw-r--r--sys/altq/altq_afmap.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/sys/altq/altq_afmap.h b/sys/altq/altq_afmap.h
new file mode 100644
index 00000000000..dd48bed2bb2
--- /dev/null
+++ b/sys/altq/altq_afmap.h
@@ -0,0 +1,104 @@
+/* $OpenBSD: altq_afmap.h,v 1.1 2001/06/27 05:28:34 kjc Exp $ */
+/* $KAME: altq_afmap.h,v 1.5 2000/12/14 08:12:45 thorpej Exp $ */
+
+/*
+ * Copyright (C) 1997-2000
+ * Sony Computer Science Laboratories Inc. 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 SONY CSL 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 SONY CSL 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.
+ */
+
+#ifndef _ALTQ_ALTQ_AFMAP_H_
+#define _ALTQ_ALTQ_AFMAP_H_
+
+#include <sys/queue.h>
+#include <altq/altq.h>
+
+struct atm_flowmap {
+ char af_ifname[IFNAMSIZ]; /* if name, e.g. "en0" */
+ u_int8_t af_vpi;
+ u_int16_t af_vci;
+ u_int32_t af_pcr; /* peek cell rate */
+ union {
+ struct flowinfo afu_fi;
+ struct flowinfo_in afu_fi4;
+#ifdef SIN6_LEN
+ struct flowinfo_in6 afu_fi6;
+#endif
+ } af_fiu;
+#define af_flowinfo af_fiu.afu_fi
+#define af_flowinfo4 af_fiu.afu_fi4
+#define af_flowinfo6 af_fiu.afu_fi6
+
+ /* statistics */
+ u_int32_t afs_packets; /* total packet count */
+ u_int32_t afs_bytes; /* total byte count */
+};
+
+/* set or get flowmap */
+#define AFM_ADDFMAP _IOWR('F', 30, struct atm_flowmap)
+#define AFM_DELFMAP _IOWR('F', 31, struct atm_flowmap)
+#define AFM_CLEANFMAP _IOWR('F', 32, struct atm_flowmap)
+#define AFM_GETFMAP _IOWR('F', 33, struct atm_flowmap)
+
+#ifdef _KERNEL
+
+/* per flow information */
+struct afm {
+ LIST_ENTRY(afm) afm_list;
+ u_int16_t afm_vci;
+ u_int8_t afm_vpi;
+ union {
+ struct flowinfo afmu_fi;
+ struct flowinfo_in afmu_fi4;
+#ifdef SIN6_LEN
+ struct flowinfo_in6 afmu_fi6;
+#endif
+ } afm_fiu;
+#define afm_flowinfo afm_fiu.afmu_fi
+#define afm_flowinfo4 afm_fiu.afmu_fi4
+#define afm_flowinfo6 afm_fiu.afmu_fi6
+
+ /* statistics */
+ u_int32_t afms_packets; /* total packet count */
+ u_int32_t afms_bytes; /* total byte count */
+};
+
+/* per interface */
+struct afm_head {
+ LIST_ENTRY(afm_head) afh_chain;
+ LIST_HEAD(, afm) afh_head;
+ struct ifnet *afh_ifp;
+};
+
+struct afm *afm_top __P((struct ifnet *));
+int afm_alloc __P((struct ifnet *));
+int afm_dealloc __P((struct ifnet *));
+int afm_add __P((struct ifnet *, struct atm_flowmap *));
+int afm_remove __P((struct afm *));
+int afm_removeall __P((struct ifnet *));
+struct afm *afm_lookup __P((struct ifnet *, int, int));
+struct afm *afm_match __P((struct ifnet *, struct flowinfo *));
+
+#endif /* _KERNEL */
+
+#endif /* _ALTQ_ALTQ_AFMAP_H_ */