summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_dummynet.h
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>1998-09-12 22:03:21 +0000
committerluigi <luigi@FreeBSD.org>1998-09-12 22:03:21 +0000
commitd45d8a3cdeee6fab56bf00071ae799ad87498527 (patch)
tree618789be77a1325ee2723ba0852d609d030ba971 /sys/netinet/ip_dummynet.h
parent613a2bdfdecf9393b99b2c5db227a51a940e746b (diff)
downloadFreeBSD-src-d45d8a3cdeee6fab56bf00071ae799ad87498527.zip
FreeBSD-src-d45d8a3cdeee6fab56bf00071ae799ad87498527.tar.gz
Bring in new files for dummynet support
Diffstat (limited to 'sys/netinet/ip_dummynet.h')
-rw-r--r--sys/netinet/ip_dummynet.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/sys/netinet/ip_dummynet.h b/sys/netinet/ip_dummynet.h
new file mode 100644
index 0000000..33833fc
--- /dev/null
+++ b/sys/netinet/ip_dummynet.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 1998 Luigi Rizzo
+ *
+ * Redistribution and use in source forms, with and without modification,
+ * are permitted provided that this entire comment appears intact.
+ *
+ * Redistribution in binary form may occur without any restrictions.
+ * Obviously, it would be nice if you gave credit where credit is due
+ * but requiring it would be too onerous.
+ *
+ * This software is provided ``AS IS'' without any warranties of any kind.
+ *
+ * $Id: ip_dummynet.h,v 1.1 1998/05/10 01:30:23 luigi Exp $
+ */
+
+#ifndef _IP_DUMMYNET_H
+#define _IP_DUMMYNET_H
+
+/*
+ * Definition of dummynet data structures.
+ * Dummynet handles a list of pipes, each one identified by a unique
+ * number (hopefully the list is short so we use a linked list).
+ *
+ * Each list contains a set of parameters identifying the pipe, and
+ * a set of packets queued on the pipe itself.
+ *
+ * I could have used queue macros, but the management i have
+ * is pretty simple and this makes the code more portable.
+ */
+
+/*
+ * struct dn_pkt identifies a packet in the dummynet queue. The
+ * first part is really an m_hdr for implementation purposes, and some
+ * fields are saved there. When passing the packet back to the ip_input/
+ * ip_output(), the struct is prepended to the mbuf chain with type
+ * MT_DUMMYNET, and contains the pointer to the matching rule.
+ */
+struct dn_pkt {
+ struct m_hdr hdr ;
+#define dn_next hdr.mh_nextpkt /* next element in queue */
+#define dn_m hdr.mh_next /* packet to be forwarded */
+#define dn_hlen hdr.mh_len /* hlen, for ip_output */
+#define dn_dir hdr.mh_flags /* IP_FW_F_IN or IP_FW_F_OUT */
+ int delay; /* stays queued until delay=0 */
+ struct ifnet *ifp; /* interface, for ip_output */
+ struct route ro; /* route, for ip_output. MUST COPY */
+
+#ifdef DUMMYNET_DEBUG
+ struct timeval beg, mid; /* testing only */
+ int act_delay; /* testing only */
+ int in_delay; /* testing only */
+#endif
+};
+
+struct dn_queue {
+ struct dn_pkt *head, *tail;
+} ;
+
+/*
+ * descriptor of a pipe. The flags field will be used to speed up the
+ * forwarding code paths, in case some of the parameters are not
+ * used.
+ */
+struct dn_pipe { /* a pipe */
+ struct dn_pipe *next ;
+
+ u_short pipe_nr ; /* number */
+ u_short flags ; /* to speed up things */
+#define DN_HAVE_BW 1
+#define DN_HAVE_QUEUE 2
+#define DN_HAVE_DELAY 4
+ int bandwidth; /* really, bytes/tick. */
+ int queue_size ;
+ int queue_size_bytes ;
+ int delay ; /* really, ticks */
+ int plr ; /* pkt loss rate (2^31-1 means 100%) */
+
+ struct dn_queue r;
+ int r_len; /* elements in r_queue */
+ int r_len_bytes; /* bytes in r_queue */
+ int r_drops; /* drops from r_queue */
+ struct dn_queue p ;
+ int ticks_from_last_insert;
+ long numbytes; /* which can send or receive */
+};
+
+/*
+ * what to do of a packet when it comes out of a pipe
+ */
+#define DN_TO_IP_OUT 1
+#define DN_TO_IP_IN 2
+#define DN_TO_BDG_FWD 3
+#ifdef KERNEL
+void ip_dn_init(void); /* called in ip_input.c */
+void dn_rule_delete(void *r); /* used in ip_fw.c */
+int dummynet_io(int pipe, int dir,
+ struct mbuf *m, struct ifnet *ifp, struct route *ro, int hlen,
+ struct ip_fw_chain *rule);
+#endif
+#endif /* _IP_DUMMYNET_H */
OpenPOWER on IntegriCloud