aboutsummaryrefslogtreecommitdiff
path: root/sys/netgraph/ng_pipe.h
diff options
context:
space:
mode:
authorJulian Elischer <julian@FreeBSD.org>2008-09-03 18:17:45 +0000
committerJulian Elischer <julian@FreeBSD.org>2008-09-03 18:17:45 +0000
commit9c238a0ec417bd1a3ea6a229f4d06757d387c299 (patch)
tree6fee93347c343539d87631754ce2e63873ce4a6d /sys/netgraph/ng_pipe.h
parent9c6b07a695496cb54c7da6df2d631ccca728c74d (diff)
downloadsrc-9c238a0ec417bd1a3ea6a229f4d06757d387c299.tar.gz
src-9c238a0ec417bd1a3ea6a229f4d06757d387c299.zip
Add Marko's pipe node.
This allows one to do flow modulation similar to dummynet between arbitrary nodes.
Notes
Notes: svn path=/head/; revision=182734
Diffstat (limited to 'sys/netgraph/ng_pipe.h')
-rw-r--r--sys/netgraph/ng_pipe.h173
1 files changed, 173 insertions, 0 deletions
diff --git a/sys/netgraph/ng_pipe.h b/sys/netgraph/ng_pipe.h
new file mode 100644
index 000000000000..e468605e9588
--- /dev/null
+++ b/sys/netgraph/ng_pipe.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2004-2008 University of Zagreb
+ * Copyright (c) 2007-2008 FreeBSD Foundation
+ *
+ * This software was developed by the University of Zagreb and the
+ * FreeBSD Foundation under sponsorship by the Stichting NLnet and the
+ * FreeBSD Foundation.
+ *
+ * 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _NETGRAPH_PIPE_H_
+#define _NETGRAPH_PIPE_H_
+
+/* Node type name and magic cookie */
+#define NG_PIPE_NODE_TYPE "pipe"
+#define NGM_PIPE_COOKIE 200708191
+
+/* Hook names */
+#define NG_PIPE_HOOK_UPPER "upper"
+#define NG_PIPE_HOOK_LOWER "lower"
+
+#define MAX_FSIZE 16384 /* Largest supported frame size, in bytes, for BER */
+#define MAX_OHSIZE 256 /* Largest supported dummy-framing size, in bytes */
+
+/* Statistics structure for one hook */
+struct ng_pipe_hookstat {
+ u_int64_t fwd_octets;
+ u_int64_t fwd_frames;
+ u_int64_t in_disc_octets;
+ u_int64_t in_disc_frames;
+ u_int64_t out_disc_octets;
+ u_int64_t out_disc_frames;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_HOOKSTAT_INFO { \
+ { "FwdOctets", &ng_parse_uint64_type }, \
+ { "FwdFrames", &ng_parse_uint64_type }, \
+ { "queueDropOctets", &ng_parse_uint64_type }, \
+ { "queueDropFrames", &ng_parse_uint64_type }, \
+ { "delayDropOctets", &ng_parse_uint64_type }, \
+ { "delayDropFrames", &ng_parse_uint64_type }, \
+ { NULL }, \
+}
+
+/* Statistics structure returned by NGM_PIPE_GET_STATS */
+struct ng_pipe_stats {
+ struct ng_pipe_hookstat downstream;
+ struct ng_pipe_hookstat upstream;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_STATS_INFO(hstype) { \
+ { "downstream", (hstype) }, \
+ { "upstream", (hstype) }, \
+ { NULL }, \
+}
+
+/* Runtime structure for one hook */
+struct ng_pipe_hookrun {
+ u_int32_t fifo_queues;
+ u_int32_t qin_octets;
+ u_int32_t qin_frames;
+ u_int32_t qout_octets;
+ u_int32_t qout_frames;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_HOOKRUN_INFO { \
+ { "queues", &ng_parse_uint32_type }, \
+ { "queuedOctets", &ng_parse_uint32_type }, \
+ { "queuedFrames", &ng_parse_uint32_type }, \
+ { "delayedOctets", &ng_parse_uint32_type }, \
+ { "delayedFrames", &ng_parse_uint32_type }, \
+ { NULL }, \
+}
+
+/* Runtime structure returned by NGM_PIPE_GET_RUN */
+struct ng_pipe_run {
+ struct ng_pipe_hookrun downstream;
+ struct ng_pipe_hookrun upstream;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_RUN_INFO(hstype) { \
+ { "downstream", (hstype) }, \
+ { "upstream", (hstype) }, \
+ { NULL }, \
+}
+
+/* Config structure for one hook */
+struct ng_pipe_hookcfg {
+ u_int64_t bandwidth;
+ u_int64_t ber;
+ u_int32_t qin_size_limit;
+ u_int32_t qout_size_limit;
+ u_int32_t duplicate;
+ u_int32_t fifo;
+ u_int32_t drr;
+ u_int32_t wfq;
+ u_int32_t droptail;
+ u_int32_t drophead;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_HOOKCFG_INFO { \
+ { "bandwidth", &ng_parse_uint64_type }, \
+ { "BER", &ng_parse_uint64_type }, \
+ { "queuelen", &ng_parse_uint32_type }, \
+ { "delaylen", &ng_parse_uint32_type }, \
+ { "duplicate", &ng_parse_uint32_type }, \
+ { "fifo", &ng_parse_uint32_type }, \
+ { "drr", &ng_parse_uint32_type }, \
+ { "wfq", &ng_parse_uint32_type }, \
+ { "droptail", &ng_parse_uint32_type }, \
+ { "drophead", &ng_parse_uint32_type }, \
+ { NULL }, \
+}
+
+/* Config structure returned by NGM_PIPE_GET_CFG */
+struct ng_pipe_cfg {
+ u_int64_t bandwidth;
+ u_int64_t delay;
+ u_int32_t header_offset;
+ u_int32_t overhead;
+ struct ng_pipe_hookcfg downstream;
+ struct ng_pipe_hookcfg upstream;
+};
+
+/* Keep this in sync with the above structure definition */
+#define NG_PIPE_CFG_INFO(hstype) { \
+ { "bandwidth", &ng_parse_uint64_type }, \
+ { "delay", &ng_parse_uint64_type }, \
+ { "header_offset", &ng_parse_uint32_type }, \
+ { "overhead", &ng_parse_uint32_type }, \
+ { "downstream", (hstype) }, \
+ { "upstream", (hstype) }, \
+ { NULL }, \
+}
+
+/* Netgraph commands */
+enum {
+ NGM_PIPE_GET_STATS=1, /* get stats */
+ NGM_PIPE_CLR_STATS, /* clear stats */
+ NGM_PIPE_GETCLR_STATS, /* atomically get and clear stats */
+ NGM_PIPE_GET_RUN, /* get current runtime status */
+ NGM_PIPE_GET_CFG, /* get configurable parameters */
+ NGM_PIPE_SET_CFG, /* set configurable parameters */
+};
+
+#endif /* _NETGRAPH_PIPE_H_ */