1204591Sluigi/* 2204591Sluigi * $FreeBSD: releng/10.3/sys/netpfil/ipfw/test/dn_test.h 204866 2010-03-08 11:27:39Z luigi $ 3204591Sluigi * 4204591Sluigi * userspace compatibility code for dummynet schedulers 5204591Sluigi */ 6204591Sluigi 7204591Sluigi#ifndef _DN_TEST_H 8204591Sluigi#define _DN_TEST_H 9204866Sluigi 10204866Sluigi#ifdef __cplusplus 11204866Sluigiextern "C" { 12204866Sluigi#endif 13204866Sluigi 14204591Sluigi#include <inttypes.h> 15204591Sluigi#include <stdio.h> 16204591Sluigi#include <stdlib.h> 17204591Sluigi#include <strings.h> /* bzero, ffs, ... */ 18204591Sluigi#include <string.h> /* strcmp */ 19204591Sluigi#include <errno.h> 20204591Sluigi#include <sys/queue.h> 21204591Sluigi#include <sys/time.h> 22204591Sluigi 23204591Sluigiextern int debug; 24204591Sluigi#define ND(fmt, args...) do {} while (0) 25204591Sluigi#define D1(fmt, args...) do {} while (0) 26204591Sluigi#define D(fmt, args...) fprintf(stderr, "%-8s " fmt "\n", \ 27204591Sluigi __FUNCTION__, ## args) 28204591Sluigi#define DX(lev, fmt, args...) do { \ 29204591Sluigi if (debug > lev) D(fmt, ## args); } while (0) 30204591Sluigi 31204591Sluigi 32204866Sluigi#ifndef offsetof 33204591Sluigi#define offsetof(t,m) (int)((&((t *)0L)->m)) 34204866Sluigi#endif 35204591Sluigi 36204591Sluigi#include <mylist.h> 37204591Sluigi 38204591Sluigi/* prevent include of other system headers */ 39204591Sluigi#define _NETINET_IP_VAR_H_ /* ip_fw_args */ 40204591Sluigi#define _IPFW2_H 41204591Sluigi#define _SYS_MBUF_H_ 42204591Sluigi 43204591Sluigienum { 44204591Sluigi DN_QUEUE, 45204591Sluigi}; 46204591Sluigi 47204591Sluigienum { 48204591Sluigi DN_SCHED_FIFO, 49204591Sluigi DN_SCHED_WF2QP, 50204591Sluigi}; 51204591Sluigi 52204591Sluigistruct dn_id { 53204591Sluigi int type, subtype, len, id; 54204591Sluigi}; 55204866Sluigi 56204591Sluigistruct dn_fs { 57204591Sluigi int par[4]; /* flowset parameters */ 58204591Sluigi 59204591Sluigi /* simulation entries. 60204591Sluigi * 'index' is not strictly necessary 61204591Sluigi * y is used for the inverse mapping , 62204591Sluigi */ 63204591Sluigi int index; 64204591Sluigi int y; /* inverse mapping */ 65204591Sluigi int base_y; /* inverse mapping */ 66204591Sluigi int next_y; /* inverse mapping */ 67204591Sluigi int n_flows; 68204591Sluigi int first_flow; 69204591Sluigi int next_flow; /* first_flow + n_flows */ 70204591Sluigi /* 71204591Sluigi * when generating, let 'cur' go from 0 to n_flows-1, 72204591Sluigi * then point to flow first_flow + cur 73204591Sluigi */ 74204591Sluigi int cur; 75204591Sluigi}; 76204866Sluigi 77204591Sluigistruct dn_sch { 78204591Sluigi}; 79204866Sluigi 80204591Sluigistruct dn_flow { 81204591Sluigi struct dn_id oid; 82204591Sluigi int length; 83204591Sluigi int len_bytes; 84204591Sluigi int drops; 85204591Sluigi uint64_t tot_bytes; 86204591Sluigi uint32_t flow_id; 87204591Sluigi struct list_head h; /* used by the generator */ 88204591Sluigi}; 89204866Sluigi 90204591Sluigistruct dn_link { 91204591Sluigi}; 92204591Sluigi 93204591Sluigistruct ip_fw_args { 94204591Sluigi}; 95204591Sluigi 96204591Sluigistruct mbuf { 97204591Sluigi struct { 98204591Sluigi int len; 99204591Sluigi } m_pkthdr; 100204591Sluigi struct mbuf *m_nextpkt; 101204591Sluigi int flow_id; /* for testing, index of a flow */ 102204591Sluigi //int flowset_id; /* for testing, index of a flowset */ 103204591Sluigi void *cfg; /* config args */ 104204591Sluigi}; 105204591Sluigi 106204591Sluigi#define MALLOC_DECLARE(x) 107204591Sluigi#define KASSERT(x, y) do { if (!(x)) printf y ; exit(0); } while (0) 108204591Sluigistruct ipfw_flow_id { 109204591Sluigi}; 110204591Sluigi 111204591Sluigitypedef void * module_t; 112204866Sluigi 113204591Sluigistruct _md_t { 114204591Sluigi const char *name; 115204591Sluigi int (*f)(module_t, int, void *); 116204591Sluigi void *p; 117204591Sluigi}; 118204866Sluigi 119204591Sluigitypedef struct _md_t moduledata_t; 120204866Sluigi 121204591Sluigi#define DECLARE_MODULE(name, b, c, d) \ 122204591Sluigi moduledata_t *_g_##name = & b 123204591Sluigi#define MODULE_DEPEND(a, b, c, d, e) 124204591Sluigi 125204591Sluigi#ifdef IPFW 126204591Sluigi#include <dn_heap.h> 127204591Sluigi#include <ip_dn_private.h> 128204591Sluigi#include <dn_sched.h> 129204591Sluigi#else 130204591Sluigistruct dn_queue { 131204591Sluigi struct dn_fsk *fs; /* parent flowset. */ 132204591Sluigi struct dn_sch_inst *_si; /* parent sched instance. */ 133204591Sluigi}; 134204591Sluigistruct dn_schk { 135204591Sluigi}; 136204591Sluigistruct dn_fsk { 137204591Sluigi struct dn_fs fs; 138204591Sluigi struct dn_schk *sched; 139204591Sluigi}; 140204591Sluigistruct dn_sch_inst { 141204591Sluigi struct dn_schk *sched; 142204591Sluigi}; 143204591Sluigistruct dn_alg { 144204591Sluigi int type; 145204591Sluigi const char *name; 146204591Sluigi void *enqueue, *dequeue; 147204591Sluigi int q_datalen, si_datalen, schk_datalen; 148204591Sluigi int (*config)(struct dn_schk *); 149204591Sluigi int (*new_sched)(struct dn_sch_inst *); 150204591Sluigi int (*new_fsk)(struct dn_fsk *); 151204591Sluigi int (*new_queue)(struct dn_queue *q); 152204591Sluigi}; 153204591Sluigi 154204591Sluigi#endif 155204591Sluigi 156204736Sluigi#ifndef __FreeBSD__ 157204736Sluigiint fls(int); 158204736Sluigi#endif 159204736Sluigi 160204591Sluigistatic inline void 161204591Sluigimq_append(struct mq *q, struct mbuf *m) 162204591Sluigi{ 163204591Sluigi if (q->head == NULL) 164204591Sluigi q->head = m; 165204591Sluigi else 166204591Sluigi q->tail->m_nextpkt = m; 167204591Sluigi q->tail = m; 168204591Sluigi m->m_nextpkt = NULL; 169204591Sluigi} 170204591Sluigi 171204866Sluigi#ifdef __cplusplus 172204866Sluigi} 173204866Sluigi#endif 174204866Sluigi 175204591Sluigi#endif /* _DN_TEST_H */ 176