[BACK]Return to altq_cdnr.h CVS log [TXT][DIR] Up to [local] / sys / altq

Annotation of sys/altq/altq_cdnr.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: altq_cdnr.h,v 1.4 2002/12/16 17:27:20 henning 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 tce_stats {
        !           167:        u_long                  tce_handle;     /* tc element handle */
        !           168:        int                     tce_type;       /* e.g., TCETYPE_ELEMENT */
        !           169:        struct pktcntr          tce_cnts[3];    /* tcm returns 3 counters */
        !           170: };
        !           171:
        !           172: struct cdnr_get_stats {
        !           173:        struct cdnr_interface   iface;
        !           174:        struct pktcntr          cnts[TCACODE_MAX+1];
        !           175:
        !           176:        /* element stats */
        !           177:        int                     nskip;          /* skip # of elements */
        !           178:        int                     nelements;      /* # of element stats (WR) */
        !           179:        struct tce_stats        *tce_stats;     /* pointer to stats array */
        !           180: };
        !           181:
        !           182: #ifndef DSCP_EF
        !           183: /* diffserve code points */
        !           184: #define        DSCP_MASK       0xfc
        !           185: #define        DSCP_CUMASK     0x03
        !           186: #define        DSCP_EF         0xb8
        !           187: #define        DSCP_AF11       0x28
        !           188: #define        DSCP_AF12       0x30
        !           189: #define        DSCP_AF13       0x38
        !           190: #define        DSCP_AF21       0x48
        !           191: #define        DSCP_AF22       0x50
        !           192: #define        DSCP_AF23       0x58
        !           193: #define        DSCP_AF31       0x68
        !           194: #define        DSCP_AF32       0x70
        !           195: #define        DSCP_AF33       0x78
        !           196: #define        DSCP_AF41       0x88
        !           197: #define        DSCP_AF42       0x90
        !           198: #define        DSCP_AF43       0x98
        !           199: #define        AF_CLASSMASK            0xe0
        !           200: #define        AF_DROPPRECMASK         0x18
        !           201: #endif
        !           202:
        !           203: #ifdef _KERNEL
        !           204:
        !           205: /*
        !           206:  * packet information passed to the input function of tc elements
        !           207:  */
        !           208: struct cdnr_pktinfo {
        !           209:        int             pkt_len;        /* packet length */
        !           210:        u_int8_t        pkt_dscp;       /* diffserv code point */
        !           211: };
        !           212:
        !           213: /*
        !           214:  * traffic conditioner control block common to all types of tc elements
        !           215:  */
        !           216: struct cdnr_block {
        !           217:        LIST_ENTRY(cdnr_block)  cb_next;
        !           218:        int             cb_len;         /* size of this tc element */
        !           219:        int             cb_type;        /* cdnr block type */
        !           220:        int             cb_ref;         /* reference count of this element */
        !           221:        u_long          cb_handle;      /* handle of this tc element */
        !           222:        struct top_cdnr *cb_top;        /* back pointer to top */
        !           223:        struct tc_action cb_action;     /* top level action for this tcb */
        !           224:        struct tc_action *(*cb_input)(struct cdnr_block *,
        !           225:                                      struct cdnr_pktinfo *);
        !           226: };
        !           227:
        !           228: /*
        !           229:  * top level traffic conditioner structure for an interface
        !           230:  */
        !           231: struct top_cdnr {
        !           232:        struct cdnr_block       tc_block;
        !           233:
        !           234:        LIST_ENTRY(top_cdnr)    tc_next;
        !           235:        struct ifaltq           *tc_ifq;
        !           236:
        !           237:        LIST_HEAD(, cdnr_block) tc_elements;
        !           238:
        !           239:        struct pktcntr          tc_cnts[TCACODE_MAX+1];
        !           240: };
        !           241:
        !           242: /* token bucket element */
        !           243: struct tbe {
        !           244:        u_int64_t       rate;
        !           245:        u_int64_t       depth;
        !           246:
        !           247:        u_int64_t       token;
        !           248:        u_int64_t       filluptime;
        !           249:        u_int64_t       last;
        !           250: };
        !           251:
        !           252: /* token bucket meter structure */
        !           253: struct tbmeter {
        !           254:        struct cdnr_block       cdnrblk;        /* conditioner block */
        !           255:        struct tbe              tb;             /* token bucket */
        !           256:        struct tc_action        in_action;      /* actions for IN/OUT */
        !           257:        struct tc_action        out_action;     /* actions for IN/OUT */
        !           258:        struct pktcntr          in_cnt;         /* statistics for IN/OUT */
        !           259:        struct pktcntr          out_cnt;        /* statistics for IN/OUT */
        !           260: };
        !           261:
        !           262: /* two-rate three-color marker structure */
        !           263: struct trtcm {
        !           264:        struct cdnr_block       cdnrblk;        /* conditioner block */
        !           265:        struct tbe              cmtd_tb;        /* committed tb profile */
        !           266:        struct tbe              peak_tb;        /* peak tb profile */
        !           267:        struct tc_action        green_action;
        !           268:        struct tc_action        yellow_action;
        !           269:        struct tc_action        red_action;
        !           270:        int                     coloraware;
        !           271:        u_int8_t                green_dscp;
        !           272:        u_int8_t                yellow_dscp;
        !           273:        u_int8_t                red_dscp;
        !           274:        struct pktcntr          green_cnt;
        !           275:        struct pktcntr          yellow_cnt;
        !           276:        struct pktcntr          red_cnt;
        !           277: };
        !           278:
        !           279: /* time sliding window three-color marker structure */
        !           280: struct tswtcm {
        !           281:        struct cdnr_block       cdnrblk;        /* conditioner block */
        !           282:
        !           283:        u_int32_t               avg_rate;       /* average rate (bytes/sec) */
        !           284:        u_int64_t               t_front;        /* timestamp of last update */
        !           285:
        !           286:        u_int64_t               timewin;        /* average interval */
        !           287:        u_int32_t               cmtd_rate;      /* committed target rate */
        !           288:        u_int32_t               peak_rate;      /* peak target rate */
        !           289:        struct tc_action        green_action;
        !           290:        struct tc_action        yellow_action;
        !           291:        struct tc_action        red_action;
        !           292:        u_int8_t                green_dscp;
        !           293:        u_int8_t                yellow_dscp;
        !           294:        u_int8_t                red_dscp;
        !           295:        struct pktcntr          green_cnt;
        !           296:        struct pktcntr          yellow_cnt;
        !           297:        struct pktcntr          red_cnt;
        !           298: };
        !           299:
        !           300: #endif /* _KERNEL */
        !           301:
        !           302: #endif /* _ALTQ_ALTQ_CDNR_H_ */

CVSweb