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.5 2006/10/12 19:59:08 peter Exp $      */
    2 /*      $KAME: altq_cdnr.h,v 1.9 2003/07/10 12:07:48 kjc Exp $  */
    3 
    4 /*
    5  * Copyright (C) 1999-2002
    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 #ifdef ALTQ3_CLFIER_COMPAT
  170         struct flow_filter      filter;
  171 #endif
  172         u_long                  filter_handle;  /* return value */
  173 };
  174 
  175 struct cdnr_delete_filter {
  176         struct cdnr_interface   iface;
  177         u_long                  filter_handle;
  178 };
  179 
  180 struct tce_stats {
  181         u_long                  tce_handle;     /* tc element handle */
  182         int                     tce_type;       /* e.g., TCETYPE_ELEMENT */
  183         struct pktcntr          tce_cnts[3];    /* tcm returns 3 counters */
  184 };
  185 
  186 struct cdnr_get_stats {
  187         struct cdnr_interface   iface;
  188         struct pktcntr          cnts[TCACODE_MAX+1];
  189 
  190         /* element stats */
  191         int                     nskip;          /* skip # of elements */
  192         int                     nelements;      /* # of element stats (WR) */
  193         struct tce_stats        *tce_stats;     /* pointer to stats array */
  194 };
  195 
  196 #define CDNR_IF_ATTACH          _IOW('Q', 1, struct cdnr_interface)
  197 #define CDNR_IF_DETACH          _IOW('Q', 2, struct cdnr_interface)
  198 #define CDNR_ENABLE             _IOW('Q', 3, struct cdnr_interface)
  199 #define CDNR_DISABLE            _IOW('Q', 4, struct cdnr_interface)
  200 #define CDNR_ADD_FILTER         _IOWR('Q', 10, struct cdnr_add_filter)
  201 #define CDNR_DEL_FILTER         _IOW('Q', 11, struct cdnr_delete_filter)
  202 #define CDNR_GETSTATS           _IOWR('Q', 12, struct cdnr_get_stats)
  203 #define CDNR_ADD_ELEM           _IOWR('Q', 30, struct cdnr_add_element)
  204 #define CDNR_DEL_ELEM           _IOW('Q', 31, struct cdnr_delete_element)
  205 #define CDNR_ADD_TBM            _IOWR('Q', 32, struct cdnr_add_tbmeter)
  206 #define CDNR_MOD_TBM            _IOW('Q', 33, struct cdnr_modify_tbmeter)
  207 #define CDNR_TBM_STATS          _IOWR('Q', 34, struct cdnr_tbmeter_stats)
  208 #define CDNR_ADD_TCM            _IOWR('Q', 35, struct cdnr_add_trtcm)
  209 #define CDNR_MOD_TCM            _IOWR('Q', 36, struct cdnr_modify_trtcm)
  210 #define CDNR_TCM_STATS          _IOWR('Q', 37, struct cdnr_tcm_stats)
  211 #define CDNR_ADD_TSW            _IOWR('Q', 38, struct cdnr_add_tswtcm)
  212 #define CDNR_MOD_TSW            _IOWR('Q', 39, struct cdnr_modify_tswtcm)
  213 
  214 #ifndef DSCP_EF
  215 /* diffserve code points */
  216 #define DSCP_MASK       0xfc
  217 #define DSCP_CUMASK     0x03
  218 #define DSCP_EF         0xb8
  219 #define DSCP_AF11       0x28
  220 #define DSCP_AF12       0x30
  221 #define DSCP_AF13       0x38
  222 #define DSCP_AF21       0x48
  223 #define DSCP_AF22       0x50
  224 #define DSCP_AF23       0x58
  225 #define DSCP_AF31       0x68
  226 #define DSCP_AF32       0x70
  227 #define DSCP_AF33       0x78
  228 #define DSCP_AF41       0x88
  229 #define DSCP_AF42       0x90
  230 #define DSCP_AF43       0x98
  231 #define AF_CLASSMASK            0xe0
  232 #define AF_DROPPRECMASK         0x18
  233 #endif
  234 
  235 #ifdef _KERNEL
  236 
  237 /*
  238  * packet information passed to the input function of tc elements
  239  */
  240 struct cdnr_pktinfo {
  241         int             pkt_len;        /* packet length */
  242         u_int8_t        pkt_dscp;       /* diffserv code point */
  243 };
  244 
  245 /*
  246  * traffic conditioner control block common to all types of tc elements
  247  */
  248 struct cdnr_block {
  249         LIST_ENTRY(cdnr_block)  cb_next;
  250         int             cb_len;         /* size of this tc element */
  251         int             cb_type;        /* cdnr block type */
  252         int             cb_ref;         /* reference count of this element */
  253         u_long          cb_handle;      /* handle of this tc element */
  254         struct top_cdnr *cb_top;        /* back pointer to top */
  255         struct tc_action cb_action;     /* top level action for this tcb */
  256         struct tc_action *(*cb_input)(struct cdnr_block *,
  257                                       struct cdnr_pktinfo *);
  258 };
  259 
  260 /*
  261  * top level traffic conditioner structure for an interface
  262  */
  263 struct top_cdnr {
  264         struct cdnr_block       tc_block;
  265 
  266         LIST_ENTRY(top_cdnr)    tc_next;
  267         struct ifaltq           *tc_ifq;
  268 
  269         LIST_HEAD(, cdnr_block) tc_elements;
  270 #ifdef ALTQ3_CLFIER_COMPAT
  271         struct acc_classifier   tc_classifier;
  272 #endif
  273         struct pktcntr          tc_cnts[TCACODE_MAX+1];
  274 };
  275 
  276 /* token bucket element */
  277 struct tbe {
  278         u_int64_t       rate;
  279         u_int64_t       depth;
  280 
  281         u_int64_t       token;
  282         u_int64_t       filluptime;
  283         u_int64_t       last;
  284 };
  285 
  286 /* token bucket meter structure */
  287 struct tbmeter {
  288         struct cdnr_block       cdnrblk;        /* conditioner block */
  289         struct tbe              tb;             /* token bucket */
  290         struct tc_action        in_action;      /* actions for IN/OUT */
  291         struct tc_action        out_action;     /* actions for IN/OUT */
  292         struct pktcntr          in_cnt;         /* statistics for IN/OUT */
  293         struct pktcntr          out_cnt;        /* statistics for IN/OUT */
  294 };
  295 
  296 /* two-rate three-color marker structure */
  297 struct trtcm {
  298         struct cdnr_block       cdnrblk;        /* conditioner block */
  299         struct tbe              cmtd_tb;        /* committed tb profile */
  300         struct tbe              peak_tb;        /* peak tb profile */
  301         struct tc_action        green_action;
  302         struct tc_action        yellow_action;
  303         struct tc_action        red_action;
  304         int                     coloraware;
  305         u_int8_t                green_dscp;
  306         u_int8_t                yellow_dscp;
  307         u_int8_t                red_dscp;
  308         struct pktcntr          green_cnt;
  309         struct pktcntr          yellow_cnt;
  310         struct pktcntr          red_cnt;
  311 };
  312 
  313 /* time sliding window three-color marker structure */
  314 struct tswtcm {
  315         struct cdnr_block       cdnrblk;        /* conditioner block */
  316 
  317         u_int32_t               avg_rate;       /* average rate (bytes/sec) */
  318         u_int64_t               t_front;        /* timestamp of last update */
  319 
  320         u_int64_t               timewin;        /* average interval */
  321         u_int32_t               cmtd_rate;      /* committed target rate */
  322         u_int32_t               peak_rate;      /* peak target rate */
  323         struct tc_action        green_action;
  324         struct tc_action        yellow_action;
  325         struct tc_action        red_action;
  326         u_int8_t                green_dscp;
  327         u_int8_t                yellow_dscp;
  328         u_int8_t                red_dscp;
  329         struct pktcntr          green_cnt;
  330         struct pktcntr          yellow_cnt;
  331         struct pktcntr          red_cnt;
  332 };
  333 
  334 #endif /* _KERNEL */
  335 
  336 #endif /* _ALTQ_ALTQ_CDNR_H_ */

Cache object: 610992caa9ea0b49678c0d23ad978889


[ 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.