The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/altq/altq_cdnr.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: altq_cdnr.h,v 1.2 2000/12/14 08:49:50 thorpej Exp $    */
    2 /*      $KAME: altq_cdnr.h,v 1.6 2000/12/14 08:12:45 thorpej Exp $      */
    3 
    4 /*
    5  * Copyright (C) 1999-2000
    6  *      Sony Computer Science Laboratories Inc.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND
   18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   20  * ARE DISCLAIMED.  IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE
   21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   27  * SUCH DAMAGE.
   28  */
   29 
   30 #ifndef _ALTQ_ALTQ_CDNR_H_
   31 #define _ALTQ_ALTQ_CDNR_H_
   32 
   33 #include <altq/altq.h>
   34 
   35 /*
   36  * traffic conditioner element types
   37  */
   38 #define TCETYPE_NONE            0
   39 #define TCETYPE_TOP             1       /* top level conditioner */
   40 #define TCETYPE_ELEMENT         2       /* a simple tc element */
   41 #define TCETYPE_TBMETER         3       /* token bucket meter */
   42 #define TCETYPE_TRTCM           4       /* (two-rate) three color marker */
   43 #define TCETYPE_TSWTCM          5       /* time sliding window 3-color maker */
   44 
   45 /*
   46  * traffic conditioner action
   47  */
   48 struct cdnr_block;
   49 
   50 struct tc_action {
   51         int     tca_code;       /* e.g., TCACODE_PASS */
   52         /* tca_code dependent variable */
   53         union {
   54                 u_long          un_value;       /* template */
   55                 u_int8_t        un_dscp;        /* diffserv code point */
   56                 u_long          un_handle;      /* tc action handle */
   57                 struct cdnr_block *un_next;     /* next tc element block */
   58         } tca_un;
   59 };
   60 #define tca_value       tca_un.un_value
   61 #define tca_dscp        tca_un.un_dscp
   62 #define tca_handle      tca_un.un_handle
   63 #define tca_next        tca_un.un_next
   64 
   65 #define TCACODE_NONE    0       /* action is not set */
   66 #define TCACODE_PASS    1       /* pass this packet */
   67 #define TCACODE_DROP    2       /* discard this packet */
   68 #define TCACODE_RETURN  3       /* do not process this packet */
   69 #define TCACODE_MARK    4       /* mark dscp */
   70 #define TCACODE_HANDLE  5       /* take action specified by handle */
   71 #define TCACODE_NEXT    6       /* take action in the next tc element */
   72 #define TCACODE_MAX     6
   73 
   74 #define CDNR_NULL_HANDLE        0
   75 
   76 struct cdnr_interface {
   77         char    cdnr_ifname[IFNAMSIZ];  /* interface name (e.g., fxp0) */
   78 };
   79 
   80 /* simple element operations */
   81 struct cdnr_add_element {
   82         struct cdnr_interface   iface;
   83         struct tc_action        action;
   84 
   85         u_long                  cdnr_handle;    /* return value */
   86 };
   87 
   88 struct cdnr_delete_element {
   89         struct cdnr_interface   iface;
   90         u_long                  cdnr_handle;
   91 };
   92 
   93 /* token-bucket meter operations */
   94 struct cdnr_add_tbmeter {
   95         struct cdnr_interface   iface;
   96         struct tb_profile       profile;
   97         struct tc_action        in_action;
   98         struct tc_action        out_action;
   99 
  100         u_long                  cdnr_handle;    /* return value */
  101 };
  102 
  103 struct cdnr_modify_tbmeter {
  104         struct cdnr_interface   iface;
  105         u_long                  cdnr_handle;
  106         struct tb_profile       profile;
  107 };
  108 
  109 struct cdnr_tbmeter_stats {
  110         struct cdnr_interface   iface;
  111         u_long                  cdnr_handle;
  112         struct pktcntr          in_cnt;
  113         struct pktcntr          out_cnt;
  114 };
  115 
  116 /* two-rate three-color marker operations */
  117 struct cdnr_add_trtcm {
  118         struct cdnr_interface   iface;
  119         struct tb_profile       cmtd_profile;   /* profile for committed tb */
  120         struct tb_profile       peak_profile;   /* profile for peak tb */ 
  121         struct tc_action        green_action;   /* action for green packets */
  122         struct tc_action        yellow_action;  /* action for yellow packets */
  123         struct tc_action        red_action;     /* action for red packets */
  124         int                     coloraware;     /* color-aware/color-blind */
  125 
  126         u_long                  cdnr_handle;    /* return value */
  127 };
  128 
  129 struct cdnr_modify_trtcm {
  130         struct cdnr_interface   iface;
  131         u_long                  cdnr_handle;
  132         struct tb_profile       cmtd_profile;   /* profile for committed tb */
  133         struct tb_profile       peak_profile;   /* profile for peak tb */ 
  134         int                     coloraware;     /* color-aware/color-blind */
  135 };
  136 
  137 struct cdnr_tcm_stats {
  138         struct cdnr_interface   iface;
  139         u_long                  cdnr_handle;
  140         struct pktcntr          green_cnt;
  141         struct pktcntr          yellow_cnt;
  142         struct pktcntr          red_cnt;
  143 };
  144 
  145 /* time sliding window three-color marker operations */
  146 struct cdnr_add_tswtcm {
  147         struct cdnr_interface   iface;
  148         u_int32_t               cmtd_rate;      /* committed rate (bits/sec) */
  149         u_int32_t               peak_rate;      /* peak rate (bits/sec) */
  150         u_int32_t               avg_interval;   /* averaging interval (msec) */
  151         struct tc_action        green_action;   /* action for green packets */
  152         struct tc_action        yellow_action;  /* action for yellow packets */
  153         struct tc_action        red_action;     /* action for red packets */
  154 
  155         u_long                  cdnr_handle;    /* return value */
  156 };
  157 
  158 struct cdnr_modify_tswtcm {
  159         struct cdnr_interface   iface;
  160         u_long                  cdnr_handle;
  161         u_int32_t               cmtd_rate;      /* committed rate (bits/sec) */
  162         u_int32_t               peak_rate;      /* peak rate (bits/sec) */
  163         u_int32_t               avg_interval;   /* averaging interval (msec) */
  164 };
  165 
  166 struct cdnr_add_filter {
  167         struct cdnr_interface   iface;
  168         u_long                  cdnr_handle;
  169         struct flow_filter      filter;
  170 
  171         u_long                  filter_handle;  /* return value */
  172 };
  173 
  174 struct cdnr_delete_filter {
  175         struct cdnr_interface   iface;
  176         u_long                  filter_handle;
  177 };
  178 
  179 struct tce_stats {
  180         u_long                  tce_handle;     /* tc element handle */
  181         int                     tce_type;       /* e.g., TCETYPE_ELEMENT */
  182         struct pktcntr          tce_cnts[3];    /* tcm returns 3 counters */
  183 };
  184 
  185 struct cdnr_get_stats {
  186         struct cdnr_interface   iface;
  187         struct pktcntr          cnts[TCACODE_MAX+1];
  188 
  189         /* element stats */
  190         int                     nskip;          /* skip # of elements */
  191         int                     nelements;      /* # of element stats (WR) */
  192         struct tce_stats        *tce_stats;     /* pointer to stats array */
  193 };
  194 
  195 #define CDNR_IF_ATTACH          _IOW('Q', 1, struct cdnr_interface)
  196 #define CDNR_IF_DETACH          _IOW('Q', 2, struct cdnr_interface)
  197 #define CDNR_ENABLE             _IOW('Q', 3, struct cdnr_interface)
  198 #define CDNR_DISABLE            _IOW('Q', 4, struct cdnr_interface)
  199 #define CDNR_ADD_FILTER         _IOWR('Q', 10, struct cdnr_add_filter)
  200 #define CDNR_DEL_FILTER         _IOW('Q', 11, struct cdnr_delete_filter)
  201 #define CDNR_GETSTATS           _IOWR('Q', 12, struct cdnr_get_stats)
  202 #define CDNR_ADD_ELEM           _IOWR('Q', 30, struct cdnr_add_element)
  203 #define CDNR_DEL_ELEM           _IOW('Q', 31, struct cdnr_delete_element)
  204 #define CDNR_ADD_TBM            _IOWR('Q', 32, struct cdnr_add_tbmeter)
  205 #define CDNR_MOD_TBM            _IOW('Q', 33, struct cdnr_modify_tbmeter)
  206 #define CDNR_TBM_STATS          _IOWR('Q', 34, struct cdnr_tbmeter_stats)
  207 #define CDNR_ADD_TCM            _IOWR('Q', 35, struct cdnr_add_trtcm)
  208 #define CDNR_MOD_TCM            _IOWR('Q', 36, struct cdnr_modify_trtcm)
  209 #define CDNR_TCM_STATS          _IOWR('Q', 37, struct cdnr_tcm_stats)
  210 #define CDNR_ADD_TSW            _IOWR('Q', 38, struct cdnr_add_tswtcm)
  211 #define CDNR_MOD_TSW            _IOWR('Q', 39, struct cdnr_modify_tswtcm)
  212 
  213 #ifndef DSCP_EF
  214 /* diffserve code points */
  215 #define DSCP_MASK       0xfc
  216 #define DSCP_CUMASK     0x03
  217 #define DSCP_EF         0xb8
  218 #define DSCP_AF11       0x28
  219 #define DSCP_AF12       0x30
  220 #define DSCP_AF13       0x38
  221 #define DSCP_AF21       0x48
  222 #define DSCP_AF22       0x50
  223 #define DSCP_AF23       0x58
  224 #define DSCP_AF31       0x68
  225 #define DSCP_AF32       0x70
  226 #define DSCP_AF33       0x78
  227 #define DSCP_AF41       0x88
  228 #define DSCP_AF42       0x90
  229 #define DSCP_AF43       0x98
  230 #define AF_CLASSMASK            0xe0
  231 #define AF_DROPPRECMASK         0x18
  232 #endif
  233 
  234 #ifdef _KERNEL
  235 
  236 /*
  237  * packet information passed to the input function of tc elements
  238  */
  239 struct cdnr_pktinfo {
  240         int             pkt_len;        /* packet length */
  241         u_int8_t        pkt_dscp;       /* diffserv code point */
  242 };
  243 
  244 /*
  245  * traffic conditioner control block common to all types of tc elements
  246  */
  247 struct cdnr_block {
  248         LIST_ENTRY(cdnr_block)  cb_next;
  249         int             cb_len;         /* size of this tc element */
  250         int             cb_type;        /* cdnr block type */
  251         int             cb_ref;         /* reference count of this element */
  252         u_long          cb_handle;      /* handle of this tc element */
  253         struct top_cdnr *cb_top;        /* back pointer to top */
  254         struct tc_action cb_action;     /* top level action for this tcb */
  255         struct tc_action *(*cb_input)(struct cdnr_block *,
  256                                       struct cdnr_pktinfo *);
  257 };
  258 
  259 /*
  260  * top level traffic conditioner structure for an interface
  261  */
  262 struct top_cdnr {
  263         struct cdnr_block       tc_block;
  264 
  265         LIST_ENTRY(top_cdnr)    tc_next;
  266         struct ifaltq           *tc_ifq;
  267 
  268         LIST_HEAD(, cdnr_block) tc_elements;
  269         struct acc_classifier   tc_classifier;
  270 
  271         struct pktcntr          tc_cnts[TCACODE_MAX+1];
  272 };
  273 
  274 /* token bucket element */
  275 struct tbe {
  276         u_int64_t       rate;
  277         u_int64_t       depth;
  278 
  279         u_int64_t       token;
  280         u_int64_t       filluptime;
  281         u_int64_t       last;
  282 };
  283 
  284 /* token bucket meter structure */
  285 struct tbmeter {
  286         struct cdnr_block       cdnrblk;        /* conditioner block */
  287         struct tbe              tb;             /* token bucket */
  288         struct tc_action        in_action;      /* actions for IN/OUT */
  289         struct tc_action        out_action;     /* actions for IN/OUT */
  290         struct pktcntr          in_cnt;         /* statistics for IN/OUT */
  291         struct pktcntr          out_cnt;        /* statistics for IN/OUT */
  292 };
  293 
  294 /* two-rate three-color marker structure */
  295 struct trtcm {
  296         struct cdnr_block       cdnrblk;        /* conditioner block */
  297         struct tbe              cmtd_tb;        /* committed tb profile */
  298         struct tbe              peak_tb;        /* peak tb profile */
  299         struct tc_action        green_action;
  300         struct tc_action        yellow_action;
  301         struct tc_action        red_action;
  302         int                     coloraware;
  303         u_int8_t                green_dscp;
  304         u_int8_t                yellow_dscp;
  305         u_int8_t                red_dscp;
  306         struct pktcntr          green_cnt;
  307         struct pktcntr          yellow_cnt;
  308         struct pktcntr          red_cnt;
  309 };
  310 
  311 /* time sliding window three-color marker structure */
  312 struct tswtcm {
  313         struct cdnr_block       cdnrblk;        /* conditioner block */
  314 
  315         u_int32_t               avg_rate;       /* average rate (bytes/sec) */
  316         u_int64_t               t_front;        /* timestamp of last update */
  317 
  318         u_int64_t               timewin;        /* average interval */
  319         u_int32_t               cmtd_rate;      /* committed target rate */
  320         u_int32_t               peak_rate;      /* peak target rate */
  321         struct tc_action        green_action;
  322         struct tc_action        yellow_action;
  323         struct tc_action        red_action;
  324         u_int8_t                green_dscp;
  325         u_int8_t                yellow_dscp;
  326         u_int8_t                red_dscp;
  327         struct pktcntr          green_cnt;
  328         struct pktcntr          yellow_cnt;
  329         struct pktcntr          red_cnt;
  330 };
  331 
  332 #endif /* _KERNEL */
  333 
  334 #endif /* _ALTQ_ALTQ_CDNR_H_ */

Cache object: 3418e438c9a6cce4318969892f96ed44


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.