diff options
author | Kenjiro Cho <kjc@cvs.openbsd.org> | 2001-06-27 05:28:37 +0000 |
---|---|---|
committer | Kenjiro Cho <kjc@cvs.openbsd.org> | 2001-06-27 05:28:37 +0000 |
commit | e13e0cc15f99577acddb2317a916f349405ee961 (patch) | |
tree | 6b866f8e79c8e6b96a779aa877dd9b6559059ba3 /sys/altq/altq_afmap.h | |
parent | c00082e97a3137a461a24364470c06ac571b833e (diff) |
import ALTQ, alternate queueing support, from KAME.
ALTQ allows to switch various queueing disciplines on output network
interfaces.
Diffstat (limited to 'sys/altq/altq_afmap.h')
-rw-r--r-- | sys/altq/altq_afmap.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/sys/altq/altq_afmap.h b/sys/altq/altq_afmap.h new file mode 100644 index 00000000000..dd48bed2bb2 --- /dev/null +++ b/sys/altq/altq_afmap.h @@ -0,0 +1,104 @@ +/* $OpenBSD: altq_afmap.h,v 1.1 2001/06/27 05:28:34 kjc Exp $ */ +/* $KAME: altq_afmap.h,v 1.5 2000/12/14 08:12:45 thorpej Exp $ */ + +/* + * Copyright (C) 1997-2000 + * Sony Computer Science Laboratories Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _ALTQ_ALTQ_AFMAP_H_ +#define _ALTQ_ALTQ_AFMAP_H_ + +#include <sys/queue.h> +#include <altq/altq.h> + +struct atm_flowmap { + char af_ifname[IFNAMSIZ]; /* if name, e.g. "en0" */ + u_int8_t af_vpi; + u_int16_t af_vci; + u_int32_t af_pcr; /* peek cell rate */ + union { + struct flowinfo afu_fi; + struct flowinfo_in afu_fi4; +#ifdef SIN6_LEN + struct flowinfo_in6 afu_fi6; +#endif + } af_fiu; +#define af_flowinfo af_fiu.afu_fi +#define af_flowinfo4 af_fiu.afu_fi4 +#define af_flowinfo6 af_fiu.afu_fi6 + + /* statistics */ + u_int32_t afs_packets; /* total packet count */ + u_int32_t afs_bytes; /* total byte count */ +}; + +/* set or get flowmap */ +#define AFM_ADDFMAP _IOWR('F', 30, struct atm_flowmap) +#define AFM_DELFMAP _IOWR('F', 31, struct atm_flowmap) +#define AFM_CLEANFMAP _IOWR('F', 32, struct atm_flowmap) +#define AFM_GETFMAP _IOWR('F', 33, struct atm_flowmap) + +#ifdef _KERNEL + +/* per flow information */ +struct afm { + LIST_ENTRY(afm) afm_list; + u_int16_t afm_vci; + u_int8_t afm_vpi; + union { + struct flowinfo afmu_fi; + struct flowinfo_in afmu_fi4; +#ifdef SIN6_LEN + struct flowinfo_in6 afmu_fi6; +#endif + } afm_fiu; +#define afm_flowinfo afm_fiu.afmu_fi +#define afm_flowinfo4 afm_fiu.afmu_fi4 +#define afm_flowinfo6 afm_fiu.afmu_fi6 + + /* statistics */ + u_int32_t afms_packets; /* total packet count */ + u_int32_t afms_bytes; /* total byte count */ +}; + +/* per interface */ +struct afm_head { + LIST_ENTRY(afm_head) afh_chain; + LIST_HEAD(, afm) afh_head; + struct ifnet *afh_ifp; +}; + +struct afm *afm_top __P((struct ifnet *)); +int afm_alloc __P((struct ifnet *)); +int afm_dealloc __P((struct ifnet *)); +int afm_add __P((struct ifnet *, struct atm_flowmap *)); +int afm_remove __P((struct afm *)); +int afm_removeall __P((struct ifnet *)); +struct afm *afm_lookup __P((struct ifnet *, int, int)); +struct afm *afm_match __P((struct ifnet *, struct flowinfo *)); + +#endif /* _KERNEL */ + +#endif /* _ALTQ_ALTQ_AFMAP_H_ */ |