Changeset View
Changeset View
Standalone View
Standalone View
sys/net/altq/altq_fairq.h
Show All 34 Lines | |||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#ifndef _ALTQ_ALTQ_FAIRQ_H_ | #ifndef _ALTQ_ALTQ_FAIRQ_H_ | ||||
#define _ALTQ_ALTQ_FAIRQ_H_ | #define _ALTQ_ALTQ_FAIRQ_H_ | ||||
#include <net/altq/altq.h> | #include <net/altq/altq.h> | ||||
#include <net/altq/altq_classq.h> | #include <net/altq/altq_classq.h> | ||||
#include <net/altq/altq_codel.h> | |||||
#include <net/altq/altq_red.h> | #include <net/altq/altq_red.h> | ||||
#include <net/altq/altq_rio.h> | #include <net/altq/altq_rio.h> | ||||
#include <net/altq/altq_rmclass.h> | #include <net/altq/altq_rmclass.h> | ||||
#define FAIRQ_MAX_BUCKETS 2048 /* maximum number of sorting buckets */ | #define FAIRQ_MAX_BUCKETS 2048 /* maximum number of sorting buckets */ | ||||
#define FAIRQ_MAXPRI RM_MAXPRIO | #define FAIRQ_MAXPRI RM_MAXPRIO | ||||
#define FAIRQ_BITMAP_WIDTH (sizeof(fairq_bitmap_t)*8) | #define FAIRQ_BITMAP_WIDTH (sizeof(fairq_bitmap_t)*8) | ||||
#define FAIRQ_BITMAP_MASK (FAIRQ_BITMAP_WIDTH - 1) | #define FAIRQ_BITMAP_MASK (FAIRQ_BITMAP_WIDTH - 1) | ||||
/* fairq class flags */ | /* fairq class flags */ | ||||
#define FARF_RED 0x0001 /* use RED */ | #define FARF_RED 0x0001 /* use RED */ | ||||
#define FARF_ECN 0x0002 /* use RED/ECN */ | #define FARF_ECN 0x0002 /* use RED/ECN */ | ||||
#define FARF_RIO 0x0004 /* use RIO */ | #define FARF_RIO 0x0004 /* use RIO */ | ||||
#define FARF_CODEL 0x0008 /* use CoDel */ | |||||
#define FARF_CLEARDSCP 0x0010 /* clear diffserv codepoint */ | #define FARF_CLEARDSCP 0x0010 /* clear diffserv codepoint */ | ||||
#define FARF_DEFAULTCLASS 0x1000 /* default class */ | #define FARF_DEFAULTCLASS 0x1000 /* default class */ | ||||
#define FARF_HAS_PACKETS 0x2000 /* might have queued packets */ | #define FARF_HAS_PACKETS 0x2000 /* might have queued packets */ | ||||
#define FARF_USERFLAGS (FARF_RED|FARF_ECN|FARF_RIO|FARF_CLEARDSCP| \ | #define FARF_USERFLAGS (FARF_RED|FARF_ECN|FARF_RIO|FARF_CLEARDSCP| \ | ||||
FARF_DEFAULTCLASS) | FARF_DEFAULTCLASS) | ||||
/* special class handles */ | /* special class handles */ | ||||
#define FAIRQ_NULLCLASS_HANDLE 0 | #define FAIRQ_NULLCLASS_HANDLE 0 | ||||
typedef u_int fairq_bitmap_t; | typedef u_int fairq_bitmap_t; | ||||
struct fairq_classstats { | struct fairq_classstats { | ||||
uint32_t class_handle; | uint32_t class_handle; | ||||
u_int qlength; | u_int qlength; | ||||
u_int qlimit; | u_int qlimit; | ||||
struct pktcntr xmit_cnt; /* transmitted packet counter */ | struct pktcntr xmit_cnt; /* transmitted packet counter */ | ||||
struct pktcntr drop_cnt; /* dropped packet counter */ | struct pktcntr drop_cnt; /* dropped packet counter */ | ||||
/* red and rio related info */ | /* codel, red and rio related info */ | ||||
int qtype; | int qtype; | ||||
struct redstats red[3]; /* rio has 3 red stats */ | struct redstats red[3]; /* rio has 3 red stats */ | ||||
struct codel_stats codel; | |||||
}; | }; | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
typedef struct fairq_bucket { | typedef struct fairq_bucket { | ||||
struct fairq_bucket *next; /* circular list */ | struct fairq_bucket *next; /* circular list */ | ||||
struct fairq_bucket *prev; /* circular list */ | struct fairq_bucket *prev; /* circular list */ | ||||
class_queue_t queue; /* the actual queue */ | class_queue_t queue; /* the actual queue */ | ||||
uint64_t bw_bytes; /* statistics used to calculate bw */ | uint64_t bw_bytes; /* statistics used to calculate bw */ | ||||
uint64_t bw_delta; /* statistics used to calculate bw */ | uint64_t bw_delta; /* statistics used to calculate bw */ | ||||
uint64_t last_time; | uint64_t last_time; | ||||
int in_use; | int in_use; | ||||
} fairq_bucket_t; | } fairq_bucket_t; | ||||
struct fairq_class { | struct fairq_class { | ||||
uint32_t cl_handle; /* class handle */ | uint32_t cl_handle; /* class handle */ | ||||
u_int cl_nbuckets; /* (power of 2) */ | u_int cl_nbuckets; /* (power of 2) */ | ||||
u_int cl_nbucket_mask; /* bucket mask */ | u_int cl_nbucket_mask; /* bucket mask */ | ||||
fairq_bucket_t *cl_buckets; | fairq_bucket_t *cl_buckets; | ||||
fairq_bucket_t *cl_head; /* head of circular bucket list */ | fairq_bucket_t *cl_head; /* head of circular bucket list */ | ||||
fairq_bucket_t *cl_polled; | fairq_bucket_t *cl_polled; | ||||
union { | |||||
struct red *cl_red; /* RED state */ | struct red *cl_red; /* RED state */ | ||||
struct codel *cl_codel; /* CoDel state */ | |||||
} cl_aqm; | |||||
#define cl_red cl_aqm.cl_red | |||||
#define cl_codel cl_aqm.cl_codel | |||||
u_int cl_hogs_m1; | u_int cl_hogs_m1; | ||||
u_int cl_lssc_m1; | u_int cl_lssc_m1; | ||||
u_int cl_bandwidth; | u_int cl_bandwidth; | ||||
uint64_t cl_bw_bytes; | uint64_t cl_bw_bytes; | ||||
uint64_t cl_bw_delta; | uint64_t cl_bw_delta; | ||||
uint64_t cl_last_time; | uint64_t cl_last_time; | ||||
int cl_qtype; /* rollup */ | int cl_qtype; /* rollup */ | ||||
int cl_qlimit; | int cl_qlimit; | ||||
Show All 28 Lines |