Annotation of XNU/bsd/netinet/ip_dummynet.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1998 Luigi Rizzo
                     24:  *
                     25:  * Redistribution and use in source forms, with and without modification,
                     26:  * are permitted provided that this entire comment appears intact.
                     27:  *
                     28:  * Redistribution in binary form may occur without any restrictions.
                     29:  * Obviously, it would be nice if you gave credit where credit is due
                     30:  * but requiring it would be too onerous.
                     31:  *
                     32:  * This software is provided ``AS IS'' without any warranties of any kind.
                     33:  *
                     34:  */
                     35: 
                     36: #ifndef _IP_DUMMYNET_H
                     37: #define _IP_DUMMYNET_H
                     38: 
                     39: /*
                     40:  * Definition of dummynet data structures.
                     41:  * Dummynet handles a list of pipes, each one identified by a unique
                     42:  * number (hopefully the list is short so we use a linked list).
                     43:  *
                     44:  * Each list contains a set of parameters identifying the pipe, and
                     45:  * a set of packets queued on the pipe itself.
                     46:  *
                     47:  * I could have used queue macros, but the management i have
                     48:  * is pretty simple and this makes the code more portable.
                     49:  */
                     50: 
                     51: /*
                     52:  * struct dn_pkt identifies a packet in the dummynet queue. The
                     53:  * first part is really an m_hdr for implementation purposes, and some
                     54:  * fields are saved there. When passing the packet back to the ip_input/
                     55:  * ip_output(), the struct is prepended to the mbuf chain with type
                     56:  * MT_DUMMYNET, and contains the pointer to the matching rule.
                     57:  */
                     58: struct dn_pkt {
                     59:        struct m_hdr hdr ;
                     60: #define dn_next        hdr.mh_nextpkt  /* next element in queue */
                     61: #define dn_m   hdr.mh_next     /* packet to be forwarded */
                     62: #define dn_hlen        hdr.mh_len      /* hlen, for ip_output                  */
                     63: #define dn_dir hdr.mh_flags    /* IP_FW_F_IN or IP_FW_F_OUT            */
                     64:         int     delay;         /* stays queued until delay=0           */
                     65:         struct ifnet *ifp;     /* interface, for ip_output             */
                     66:         struct route ro;       /* route, for ip_output. MUST COPY      */
                     67: 
                     68: #if   DUMMYNET_DEBUG
                     69:         struct timeval beg, mid;        /* testing only */
                     70:         int     act_delay;      /* testing only */
                     71:         int     in_delay;       /* testing only */
                     72: #endif
                     73: };
                     74: 
                     75: struct dn_queue {
                     76:        struct dn_pkt *head, *tail;
                     77: } ;
                     78: 
                     79: /*
                     80:  * descriptor of a pipe. The flags field will be used to speed up the
                     81:  * forwarding code paths, in case some of the parameters are not
                     82:  * used.
                     83:  */
                     84: struct dn_pipe {                       /* a pipe */
                     85:        struct dn_pipe *next ;
                     86: 
                     87:        u_short pipe_nr ;               /* number       */
                     88:        u_short flags ;                 /* to speed up things   */
                     89: #define DN_HAVE_BW     1
                     90: #define DN_HAVE_QUEUE  2
                     91: #define DN_HAVE_DELAY  4
                     92:        int     bandwidth;              /* really, bytes/tick.  */
                     93:        int     queue_size ;
                     94:        int     queue_size_bytes ;
                     95:        int     delay ;                 /* really, ticks        */
                     96:        int     plr ;           /* pkt loss rate (2^31-1 means 100%) */
                     97: 
                     98:         struct dn_queue r;
                     99:         int    r_len;                  /* elements in r_queue */
                    100:         int    r_len_bytes;            /* bytes in r_queue */
                    101:         int    r_drops;                /* drops from r_queue */
                    102:         struct dn_queue p ;
                    103:         int     ticks_from_last_insert;
                    104:         long    numbytes;              /* which can send or receive */
                    105: };
                    106: 
                    107: /*
                    108:  * The following is used to define a new mbuf type that is
                    109:  * prepended to the packet when it comes out of a pipe. The definition
                    110:  * ought to go in /sys/sys/mbuf.h but here it is less intrusive.
                    111:  */
                    112: 
                    113: #define MT_DUMMYNET MT_CONTROL
                    114: /*
                    115:  * what to do of a packet when it comes out of a pipe
                    116:  */
                    117: #define DN_TO_IP_OUT   1
                    118: #define DN_TO_IP_IN    2
                    119: #define DN_TO_BDG_FWD  3
                    120: 
                    121: #if KERNEL
                    122: 
                    123: MALLOC_DECLARE(M_IPFW);
                    124: 
                    125: typedef int ip_dn_ctl_t __P((struct sockopt *)) ;
                    126: extern ip_dn_ctl_t *ip_dn_ctl_ptr;
                    127: 
                    128: void ip_dn_init(void); /* called in ip_input.c */
                    129: void dn_rule_delete(void *r);          /* used in ip_fw.c */
                    130: int dummynet_io(int pipe, int dir,
                    131:        struct mbuf *m, struct ifnet *ifp, struct route *ro, int hlen,
                    132:        struct ip_fw_chain *rule);
                    133: #endif /* KERNEL */
                    134: 
                    135: #endif /* _IP_DUMMYNET_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.