]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/netpfil/ipfw/test/dn_test.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / netpfil / ipfw / test / dn_test.h
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 */