xref: /freebsd/sys/netpfil/ipfw/test/dn_test.h (revision 7d99ab9fd0cc2c1ce2ecef0ed6d0672c2a50b0cb)
1 /*
2  * $FreeBSD$
3  *
4  * userspace compatibility code for dummynet schedulers
5  */
6 
7 #ifndef _DN_TEST_H
8 #define _DN_TEST_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include <inttypes.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <strings.h>	/* bzero, ffs, ... */
18 #include <string.h>	/* strcmp */
19 #include <errno.h>
20 #include <sys/queue.h>
21 #include <sys/time.h>
22 
23 extern int debug;
24 #define ND(fmt, args...) do {} while (0)
25 #define D1(fmt, args...) do {} while (0)
26 #define D(fmt, args...) fprintf(stderr, "%-8s " fmt "\n",      \
27         __FUNCTION__, ## args)
28 #define DX(lev, fmt, args...) do {              \
29         if (debug > lev) D(fmt, ## args); } while (0)
30 
31 
32 #ifndef offsetof
33 #define offsetof(t,m) (int)((&((t *)0L)->m))
34 #endif
35 
36 #include <mylist.h>
37 
38 /* prevent include of other system headers */
39 #define	_NETINET_IP_VAR_H_	/* ip_fw_args */
40 #define _IPFW2_H
41 #define _SYS_MBUF_H_
42 
43 enum	{
44 	DN_QUEUE,
45 };
46 
47 enum	{
48 	DN_SCHED_FIFO,
49 	DN_SCHED_WF2QP,
50 };
51 
52 struct dn_id {
53 	int type, subtype, len, id;
54 };
55 
56 struct dn_fs {
57 	int par[4];	/* flowset parameters */
58 
59 	/* simulation entries.
60 	 * 'index' is not strictly necessary
61 	 * y is used for the inverse mapping ,
62 	 */
63 	int index;
64 	int y;	/* inverse mapping */
65 	int base_y;	/* inverse mapping */
66 	int next_y;	/* inverse mapping */
67 	int n_flows;
68 	int first_flow;
69 	int next_flow;	/* first_flow + n_flows */
70 	/*
71 	 * when generating, let 'cur' go from 0 to n_flows-1,
72 	 * then point to flow first_flow + cur
73 	 */
74 	int	cur;
75 };
76 
77 struct dn_sch {
78 };
79 
80 struct dn_flow {
81 	struct dn_id oid;
82 	int length;
83 	int len_bytes;
84 	int drops;
85 	uint64_t tot_bytes;
86 	uint32_t flow_id;
87 	struct list_head h;	/* used by the generator */
88 };
89 
90 struct dn_link {
91 };
92 
93 struct ip_fw_args {
94 };
95 
96 struct mbuf {
97         struct {
98                 int len;
99         } m_pkthdr;
100         struct mbuf *m_nextpkt;
101 	int flow_id;	/* for testing, index of a flow */
102 	//int flowset_id;	/* for testing, index of a flowset */
103 	void *cfg;	/* config args */
104 };
105 
106 #define MALLOC_DECLARE(x)
107 #define KASSERT(x, y)	do { if (!(x)) printf y ; exit(0); } while (0)
108 struct ipfw_flow_id {
109 };
110 
111 typedef void * module_t;
112 
113 struct _md_t {
114 	const char *name;
115 	int (*f)(module_t, int, void *);
116 	void *p;
117 };
118 
119 typedef struct _md_t moduledata_t;
120 
121 #define DECLARE_MODULE(name, b, c, d)	\
122 	moduledata_t *_g_##name = & b
123 #define MODULE_DEPEND(a, b, c, d, e)
124 
125 #ifdef IPFW
126 #include <dn_heap.h>
127 #include <ip_dn_private.h>
128 #include <dn_sched.h>
129 #else
130 struct dn_queue {
131         struct dn_fsk *fs;             /* parent flowset. */
132         struct dn_sch_inst *_si;	/* parent sched instance. */
133 };
134 struct dn_schk {
135 };
136 struct dn_fsk {
137 	struct dn_fs fs;
138 	struct dn_schk *sched;
139 };
140 struct dn_sch_inst {
141 	struct dn_schk *sched;
142 };
143 struct dn_alg {
144 	int type;
145 	const char *name;
146 	void *enqueue, *dequeue;
147 	int q_datalen, si_datalen, schk_datalen;
148 	int (*config)(struct dn_schk *);
149 	int (*new_sched)(struct dn_sch_inst *);
150 	int (*new_fsk)(struct dn_fsk *);
151         int (*new_queue)(struct dn_queue *q);
152 };
153 
154 #endif
155 
156 #ifndef __FreeBSD__
157 int fls(int);
158 #endif
159 
160 static inline void
161 mq_append(struct mq *q, struct mbuf *m)
162 {
163         if (q->head == NULL)
164                 q->head = m;
165         else
166                 q->tail->m_nextpkt = m;
167         q->tail = m;
168         m->m_nextpkt = NULL;
169 }
170 
171 #ifdef __cplusplus
172 }
173 #endif
174 
175 #endif /* _DN_TEST_H */
176