head 1.8; access; symbols netbsd-10-0-RELEASE:1.8 netbsd-10-0-RC6:1.8 netbsd-10-0-RC5:1.8 netbsd-10-0-RC4:1.8 netbsd-10-0-RC3:1.8 netbsd-10-0-RC2:1.8 thorpej-ifq:1.8.0.176 thorpej-ifq-base:1.8 thorpej-altq-separation:1.8.0.174 thorpej-altq-separation-base:1.8 netbsd-10-0-RC1:1.8 netbsd-10:1.8.0.172 netbsd-10-base:1.8 bouyer-sunxi-drm:1.8.0.170 bouyer-sunxi-drm-base:1.8 netbsd-9-3-RELEASE:1.8 thorpej-i2c-spi-conf2:1.8.0.168 thorpej-i2c-spi-conf2-base:1.8 thorpej-futex2:1.8.0.166 thorpej-futex2-base:1.8 thorpej-cfargs2:1.8.0.164 thorpej-cfargs2-base:1.8 cjep_sun2x-base1:1.8 cjep_sun2x:1.8.0.162 cjep_sun2x-base:1.8 cjep_staticlib_x-base1:1.8 netbsd-9-2-RELEASE:1.8 cjep_staticlib_x:1.8.0.160 cjep_staticlib_x-base:1.8 thorpej-i2c-spi-conf:1.8.0.158 thorpej-i2c-spi-conf-base:1.8 thorpej-cfargs:1.8.0.156 thorpej-cfargs-base:1.8 thorpej-futex:1.8.0.154 thorpej-futex-base:1.8 netbsd-9-1-RELEASE:1.8 bouyer-xenpvh-base2:1.8 phil-wifi-20200421:1.8 bouyer-xenpvh-base1:1.8 phil-wifi-20200411:1.8 bouyer-xenpvh:1.8.0.152 bouyer-xenpvh-base:1.8 is-mlppp:1.8.0.150 is-mlppp-base:1.8 phil-wifi-20200406:1.8 netbsd-8-2-RELEASE:1.8 ad-namecache-base3:1.8 netbsd-9-0-RELEASE:1.8 netbsd-9-0-RC2:1.8 ad-namecache-base2:1.8 ad-namecache-base1:1.8 ad-namecache:1.8.0.148 ad-namecache-base:1.8 netbsd-9-0-RC1:1.8 phil-wifi-20191119:1.8 netbsd-9:1.8.0.146 netbsd-9-base:1.8 phil-wifi-20190609:1.8 netbsd-8-1-RELEASE:1.8 netbsd-8-1-RC1:1.8 isaki-audio2:1.8.0.144 isaki-audio2-base:1.8 pgoyette-compat-merge-20190127:1.8 pgoyette-compat-20190127:1.8 pgoyette-compat-20190118:1.8 pgoyette-compat-1226:1.8 pgoyette-compat-1126:1.8 pgoyette-compat-1020:1.8 pgoyette-compat-0930:1.8 pgoyette-compat-0906:1.8 netbsd-7-2-RELEASE:1.8 pgoyette-compat-0728:1.8 netbsd-8-0-RELEASE:1.8 phil-wifi:1.8.0.142 phil-wifi-base:1.8 pgoyette-compat-0625:1.8 netbsd-8-0-RC2:1.8 pgoyette-compat-0521:1.8 pgoyette-compat-0502:1.8 pgoyette-compat-0422:1.8 netbsd-8-0-RC1:1.8 pgoyette-compat-0415:1.8 pgoyette-compat-0407:1.8 pgoyette-compat-0330:1.8 pgoyette-compat-0322:1.8 pgoyette-compat-0315:1.8 netbsd-7-1-2-RELEASE:1.8 pgoyette-compat:1.8.0.140 pgoyette-compat-base:1.8 netbsd-7-1-1-RELEASE:1.8 tls-maxphys-base-20171202:1.8 matt-nb8-mediatek:1.8.0.138 matt-nb8-mediatek-base:1.8 nick-nhusb-base-20170825:1.8 perseant-stdc-iso10646:1.8.0.136 perseant-stdc-iso10646-base:1.8 netbsd-8:1.8.0.134 netbsd-8-base:1.8 prg-localcount2-base3:1.8 prg-localcount2-base2:1.8 prg-localcount2-base1:1.8 prg-localcount2:1.8.0.132 prg-localcount2-base:1.8 pgoyette-localcount-20170426:1.8 bouyer-socketcan-base1:1.8 jdolecek-ncq:1.8.0.130 jdolecek-ncq-base:1.8 pgoyette-localcount-20170320:1.8 netbsd-7-1:1.8.0.128 netbsd-7-1-RELEASE:1.8 netbsd-7-1-RC2:1.8 nick-nhusb-base-20170204:1.8 netbsd-7-nhusb-base-20170116:1.8 bouyer-socketcan:1.8.0.126 bouyer-socketcan-base:1.8 pgoyette-localcount-20170107:1.8 netbsd-7-1-RC1:1.8 nick-nhusb-base-20161204:1.8 pgoyette-localcount-20161104:1.8 netbsd-7-0-2-RELEASE:1.8 nick-nhusb-base-20161004:1.8 localcount-20160914:1.8 netbsd-7-nhusb:1.8.0.124 netbsd-7-nhusb-base:1.8 pgoyette-localcount-20160806:1.8 pgoyette-localcount-20160726:1.8 pgoyette-localcount:1.8.0.122 pgoyette-localcount-base:1.8 nick-nhusb-base-20160907:1.8 nick-nhusb-base-20160529:1.8 netbsd-7-0-1-RELEASE:1.8 nick-nhusb-base-20160422:1.8 nick-nhusb-base-20160319:1.8 nick-nhusb-base-20151226:1.8 netbsd-7-0:1.8.0.120 netbsd-7-0-RELEASE:1.8 nick-nhusb-base-20150921:1.8 netbsd-7-0-RC3:1.8 netbsd-7-0-RC2:1.8 netbsd-7-0-RC1:1.8 nick-nhusb-base-20150606:1.8 nick-nhusb-base-20150406:1.8 nick-nhusb:1.8.0.118 nick-nhusb-base:1.8 netbsd-5-2-3-RELEASE:1.8 netbsd-5-1-5-RELEASE:1.8 netbsd-6-0-6-RELEASE:1.8 netbsd-6-1-5-RELEASE:1.8 netbsd-7:1.8.0.116 netbsd-7-base:1.8 yamt-pagecache-base9:1.8 yamt-pagecache-tag8:1.8 netbsd-6-1-4-RELEASE:1.8 netbsd-6-0-5-RELEASE:1.8 tls-earlyentropy:1.8.0.114 tls-earlyentropy-base:1.8 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.8 riastradh-drm2-base3:1.8 netbsd-6-1-3-RELEASE:1.8 netbsd-6-0-4-RELEASE:1.8 netbsd-5-2-2-RELEASE:1.8 netbsd-5-1-4-RELEASE:1.8 netbsd-6-1-2-RELEASE:1.8 netbsd-6-0-3-RELEASE:1.8 netbsd-5-2-1-RELEASE:1.8 netbsd-5-1-3-RELEASE:1.8 rmind-smpnet-nbase:1.8 netbsd-6-1-1-RELEASE:1.8 riastradh-drm2-base2:1.8 riastradh-drm2-base1:1.8 riastradh-drm2:1.8.0.112 riastradh-drm2-base:1.8 rmind-smpnet:1.8.0.104 rmind-smpnet-base:1.8 netbsd-6-1:1.8.0.110 netbsd-6-0-2-RELEASE:1.8 netbsd-6-1-RELEASE:1.8 khorben-n900:1.8.0.108 netbsd-6-1-RC4:1.8 netbsd-6-1-RC3:1.8 agc-symver:1.8.0.106 agc-symver-base:1.8 netbsd-6-1-RC2:1.8 netbsd-6-1-RC1:1.8 yamt-pagecache-base8:1.8 netbsd-5-2:1.8.0.102 netbsd-6-0-1-RELEASE:1.8 yamt-pagecache-base7:1.8 netbsd-5-2-RELEASE:1.8 netbsd-5-2-RC1:1.8 matt-nb6-plus-nbase:1.8 yamt-pagecache-base6:1.8 netbsd-6-0:1.8.0.100 netbsd-6-0-RELEASE:1.8 netbsd-6-0-RC2:1.8 tls-maxphys:1.8.0.98 tls-maxphys-base:1.8 matt-nb6-plus:1.8.0.96 matt-nb6-plus-base:1.8 netbsd-6-0-RC1:1.8 jmcneill-usbmp-base10:1.8 yamt-pagecache-base5:1.8 jmcneill-usbmp-base9:1.8 yamt-pagecache-base4:1.8 jmcneill-usbmp-base8:1.8 jmcneill-usbmp-base7:1.8 jmcneill-usbmp-base6:1.8 jmcneill-usbmp-base5:1.8 jmcneill-usbmp-base4:1.8 jmcneill-usbmp-base3:1.8 jmcneill-usbmp-pre-base2:1.8 jmcneill-usbmp-base2:1.8 netbsd-6:1.8.0.94 netbsd-6-base:1.8 netbsd-5-1-2-RELEASE:1.8 netbsd-5-1-1-RELEASE:1.8 jmcneill-usbmp:1.8.0.92 jmcneill-usbmp-base:1.8 jmcneill-audiomp3:1.8.0.90 jmcneill-audiomp3-base:1.8 yamt-pagecache-base3:1.8 yamt-pagecache-base2:1.8 yamt-pagecache:1.8.0.88 yamt-pagecache-base:1.8 rmind-uvmplock-nbase:1.8 cherry-xenmp:1.8.0.86 cherry-xenmp-base:1.8 bouyer-quota2-nbase:1.8 bouyer-quota2:1.8.0.84 bouyer-quota2-base:1.8 jruoho-x86intr:1.8.0.82 jruoho-x86intr-base:1.8 matt-mips64-premerge-20101231:1.8 matt-nb5-mips64-premerge-20101231:1.8 matt-nb5-pq3:1.8.0.80 matt-nb5-pq3-base:1.8 netbsd-5-1:1.8.0.78 netbsd-5-1-RELEASE:1.8 uebayasi-xip-base4:1.8 uebayasi-xip-base3:1.8 yamt-nfs-mp-base11:1.8 netbsd-5-1-RC4:1.8 matt-nb5-mips64-k15:1.8 uebayasi-xip-base2:1.8 yamt-nfs-mp-base10:1.8 netbsd-5-1-RC3:1.8 netbsd-5-1-RC2:1.8 uebayasi-xip-base1:1.8 netbsd-5-1-RC1:1.8 rmind-uvmplock:1.8.0.76 rmind-uvmplock-base:1.8 yamt-nfs-mp-base9:1.8 uebayasi-xip:1.8.0.74 uebayasi-xip-base:1.8 netbsd-5-0-2-RELEASE:1.8 matt-nb5-mips64-premerge-20091211:1.8 matt-premerge-20091211:1.8 yamt-nfs-mp-base8:1.8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.8 matt-nb4-mips64-k7-u2a-k9b:1.8 matt-nb5-mips64-u1-k1-k5:1.8 yamt-nfs-mp-base7:1.8 matt-nb5-mips64:1.8.0.72 netbsd-5-0-1-RELEASE:1.8 jymxensuspend-base:1.8 yamt-nfs-mp-base6:1.8 yamt-nfs-mp-base5:1.8 yamt-nfs-mp-base4:1.8 jym-xensuspend-nbase:1.8 yamt-nfs-mp-base3:1.8 nick-hppapmap-base4:1.8 nick-hppapmap-base3:1.8 netbsd-5-0:1.8.0.70 netbsd-5-0-RELEASE:1.8 netbsd-5-0-RC4:1.8 netbsd-5-0-RC3:1.8 nick-hppapmap-base2:1.8 netbsd-5-0-RC2:1.8 jym-xensuspend:1.8.0.68 jym-xensuspend-base:1.8 netbsd-5-0-RC1:1.8 haad-dm-base2:1.8 haad-nbase2:1.8 ad-audiomp2:1.8.0.66 ad-audiomp2-base:1.8 netbsd-5:1.8.0.64 netbsd-5-base:1.8 nick-hppapmap:1.8.0.62 nick-hppapmap-base:1.8 matt-mips64-base2:1.8 matt-mips64:1.8.0.60 haad-dm-base1:1.8 wrstuden-revivesa-base-4:1.8 netbsd-4-0-1-RELEASE:1.8 wrstuden-revivesa-base-3:1.8 wrstuden-revivesa-base-2:1.8 wrstuden-fixsa-newbase:1.8 nick-csl-alignment-base5:1.8 haad-dm:1.8.0.58 haad-dm-base:1.8 wrstuden-revivesa-base-1:1.8 simonb-wapbl-nbase:1.8 yamt-pf42-base4:1.8 simonb-wapbl:1.8.0.56 simonb-wapbl-base:1.8 yamt-pf42-base3:1.8 hpcarm-cleanup-nbase:1.8 yamt-pf42-baseX:1.8 yamt-pf42-base2:1.8 yamt-nfs-mp-base2:1.8 wrstuden-revivesa:1.8.0.54 wrstuden-revivesa-base:1.8 yamt-nfs-mp:1.8.0.52 yamt-nfs-mp-base:1.8 yamt-pf42:1.8.0.50 yamt-pf42-base:1.8 ad-socklock-base1:1.8 yamt-lazymbuf-base15:1.8 yamt-lazymbuf-base14:1.8 keiichi-mipv6-nbase:1.8 mjf-devfs2:1.8.0.48 mjf-devfs2-base:1.8 nick-net80211-sync:1.8.0.46 nick-net80211-sync-base:1.8 keiichi-mipv6:1.8.0.44 keiichi-mipv6-base:1.8 ad-audiomp-base-1:1.8 bouyer-xeni386-merge1:1.8 matt-armv6-prevmlocking:1.8 wrstuden-fixsa-base-1:1.8 vmlocking2-base3:1.8 netbsd-4-0:1.8.0.42 netbsd-4-0-RELEASE:1.8 bouyer-xeni386-nbase:1.8 yamt-kmem-base3:1.8 cube-autoconf:1.8.0.40 cube-autoconf-base:1.8 yamt-kmem-base2:1.8 bouyer-xeni386:1.8.0.38 bouyer-xeni386-base:1.8 yamt-kmem:1.8.0.36 yamt-kmem-base:1.8 vmlocking2-base2:1.8 reinoud-bufcleanup-nbase:1.8 vmlocking2:1.8.0.34 vmlocking2-base1:1.8 netbsd-4-0-RC5:1.8 matt-nb4-arm:1.8.0.32 matt-nb4-arm-base:1.8 matt-armv6-nbase:1.8 jmcneill-base:1.8 netbsd-4-0-RC4:1.8 mjf-devfs:1.8.0.30 mjf-devfs-base:1.8 bouyer-xenamd64-base2:1.8 vmlocking-nbase:1.8 yamt-x86pmap-base4:1.8 bouyer-xenamd64:1.8.0.28 bouyer-xenamd64-base:1.8 netbsd-4-0-RC3:1.8 yamt-x86pmap-base3:1.8 yamt-x86pmap-base2:1.8 netbsd-4-0-RC2:1.8 yamt-x86pmap:1.8.0.26 yamt-x86pmap-base:1.8 netbsd-4-0-RC1:1.8 matt-armv6:1.8.0.24 matt-armv6-base:1.8 matt-mips64-base:1.8 jmcneill-pm:1.8.0.22 jmcneill-pm-base:1.8 hpcarm-cleanup:1.8.0.20 hpcarm-cleanup-base:1.8 nick-csl-alignment:1.8.0.18 nick-csl-alignment-base:1.8 netbsd-3-1-1-RELEASE:1.6 netbsd-3-0-3-RELEASE:1.6 yamt-idlelwp-base8:1.8 wrstuden-fixsa:1.8.0.16 wrstuden-fixsa-base:1.8 thorpej-atomic:1.8.0.14 thorpej-atomic-base:1.8 reinoud-bufcleanup:1.8.0.12 reinoud-bufcleanup-base:1.8 mjf-ufs-trans:1.8.0.10 mjf-ufs-trans-base:1.8 vmlocking:1.8.0.8 vmlocking-base:1.8 ad-audiomp:1.8.0.6 ad-audiomp-base:1.8 yamt-idlelwp:1.8.0.4 post-newlock2-merge:1.8 newlock2-nbase:1.8 yamt-splraiseipl-base5:1.8 yamt-splraiseipl-base4:1.8 yamt-splraiseipl-base3:1.8 abandoned-netbsd-4-base:1.7 abandoned-netbsd-4:1.7.0.18 netbsd-3-1:1.6.0.14 netbsd-3-1-RELEASE:1.6 netbsd-3-0-2-RELEASE:1.6 yamt-splraiseipl-base2:1.8 netbsd-3-1-RC4:1.6 yamt-splraiseipl:1.7.0.22 yamt-splraiseipl-base:1.7 netbsd-3-1-RC3:1.6 yamt-pdpolicy-base9:1.7 newlock2:1.7.0.20 newlock2-base:1.8 yamt-pdpolicy-base8:1.7 netbsd-3-1-RC2:1.6 netbsd-3-1-RC1:1.6 yamt-pdpolicy-base7:1.7 netbsd-4:1.8.0.2 netbsd-4-base:1.8 yamt-pdpolicy-base6:1.7 chap-midi-nbase:1.7 netbsd-3-0-1-RELEASE:1.6 gdamore-uart:1.7.0.16 gdamore-uart-base:1.7 simonb-timcounters-final:1.7 yamt-pdpolicy-base5:1.7 chap-midi:1.7.0.14 chap-midi-base:1.7 yamt-pdpolicy-base4:1.7 yamt-pdpolicy-base3:1.7 peter-altq-base:1.7 peter-altq:1.7.0.12 yamt-pdpolicy-base2:1.7 elad-kernelauth-base:1.7 elad-kernelauth:1.7.0.10 yamt-pdpolicy:1.7.0.8 yamt-pdpolicy-base:1.7 yamt-uio_vmspace-base5:1.7 simonb-timecounters:1.7.0.6 simonb-timecounters-base:1.7 rpaulo-netinet-merge-pcb:1.7.0.4 rpaulo-netinet-merge-pcb-base:1.7 yamt-uio_vmspace:1.7.0.2 netbsd-3-0:1.6.0.12 netbsd-3-0-RELEASE:1.6 netbsd-3-0-RC6:1.6 yamt-readahead-base3:1.6 netbsd-3-0-RC5:1.6 netbsd-3-0-RC4:1.6 netbsd-3-0-RC3:1.6 yamt-readahead-base2:1.6 netbsd-3-0-RC2:1.6 yamt-readahead-pervnode:1.6 yamt-readahead-perfile:1.6 yamt-readahead:1.6.0.10 yamt-readahead-base:1.6 netbsd-3-0-RC1:1.6 yamt-vop-base3:1.6 netbsd-2-0-3-RELEASE:1.5 netbsd-2-1:1.5.0.16 yamt-vop-base2:1.6 thorpej-vnode-attr:1.6.0.8 thorpej-vnode-attr-base:1.6 netbsd-2-1-RELEASE:1.5 yamt-vop:1.6.0.6 yamt-vop-base:1.6 netbsd-2-1-RC6:1.5 netbsd-2-1-RC5:1.5 netbsd-2-1-RC4:1.5 netbsd-2-1-RC3:1.5 netbsd-2-1-RC2:1.5 netbsd-2-1-RC1:1.5 yamt-lazymbuf:1.6.0.4 yamt-km-base4:1.6 netbsd-2-0-2-RELEASE:1.5 yamt-km-base3:1.6 netbsd-3:1.6.0.2 netbsd-3-base:1.6 yamt-km-base2:1.5 yamt-km:1.5.0.12 yamt-km-base:1.5 kent-audio2:1.5.0.10 kent-audio2-base:1.6 netbsd-2-0-1-RELEASE:1.5 kent-audio1-beforemerge:1.5 netbsd-2:1.5.0.8 netbsd-2-base:1.5 kent-audio1:1.5.0.6 kent-audio1-base:1.5 netbsd-2-0-RELEASE:1.5 netbsd-2-0-RC5:1.5 netbsd-2-0-RC4:1.5 netbsd-2-0-RC3:1.5 netbsd-2-0-RC2:1.5 netbsd-2-0-RC1:1.5 netbsd-2-0:1.5.0.4 netbsd-2-0-base:1.5 netbsd-1-6-PATCH002-RELEASE:1.2 netbsd-1-6-PATCH002:1.2 netbsd-1-6-PATCH002-RC4:1.2 netbsd-1-6-PATCH002-RC3:1.2 netbsd-1-6-PATCH002-RC2:1.2 netbsd-1-6-PATCH002-RC1:1.2 ktrace-lwp:1.5.0.2 ktrace-lwp-base:1.6 netbsd-1-6-PATCH001:1.2 netbsd-1-6-PATCH001-RELEASE:1.2 netbsd-1-6-PATCH001-RC3:1.2 netbsd-1-6-PATCH001-RC2:1.2 netbsd-1-6-PATCH001-RC1:1.2 nathanw_sa_end:1.2.4.1 nathanw_sa_before_merge:1.5 fvdl_fs64_base:1.2 gmcgarry_ctxsw:1.2.0.24 gmcgarry_ctxsw_base:1.2 gmcgarry_ucred:1.2.0.22 gmcgarry_ucred_base:1.2 nathanw_sa_base:1.5 kqueue-aftermerge:1.2 kqueue-beforemerge:1.2 netbsd-1-6-RELEASE:1.2 netbsd-1-6-RC3:1.2 netbsd-1-6-RC2:1.2 netbsd-1-6-RC1:1.2 netbsd-1-6:1.2.0.20 netbsd-1-6-base:1.2 gehenna-devsw:1.2.0.18 gehenna-devsw-base:1.2 eeh-devprop:1.2.0.16 eeh-devprop-base:1.2 newlock:1.2.0.14 newlock-base:1.2 ifpoll-base:1.2 thorpej-mips-cache:1.2.0.10 thorpej-mips-cache-base:1.2 thorpej-devvp-base3:1.2 thorpej-devvp-base2:1.2 post-chs-ubcperf:1.2 pre-chs-ubcperf:1.2 thorpej-devvp:1.2.0.8 thorpej-devvp-base:1.2 kqueue:1.2.0.6 kqueue-base:1.2 thorpej_scsipi_beforemerge:1.2 nathanw_sa:1.2.0.4 thorpej_scsipi_nbase:1.2 thorpej_scsipi_base:1.2 thorpej_scsipi:1.2.0.2 kame_15_20001214:1.1.1.1 kame:1.1.1; locks; strict; comment @ * @; 1.8 date 2006.10.12.19.59.08; author peter; state Exp; branches; next 1.7; 1.7 date 2005.12.11.12.16.03; author christos; state Exp; branches 1.7.12.1 1.7.20.1 1.7.22.1; next 1.6; 1.6 date 2005.02.26.23.04.16; author perry; state Exp; branches 1.6.4.1; next 1.5; 1.5 date 2003.01.06.15.20.24; author christos; state Exp; branches 1.5.2.1 1.5.10.1 1.5.12.1; next 1.4; 1.4 date 2003.01.06.14.09.42; author christos; state Exp; branches; next 1.3; 1.3 date 2003.01.06.03.44.24; author christos; state Exp; branches; next 1.2; 1.2 date 2000.12.14.08.49.50; author thorpej; state Exp; branches 1.2.2.1 1.2.4.1; next 1.1; 1.1 date 2000.12.14.08.42.34; author thorpej; state Exp; branches 1.1.1.1; next ; 1.7.12.1 date 2006.03.18.12.08.18; author peter; state Exp; branches; next ; 1.7.20.1 date 2006.11.18.21.39.03; author ad; state Exp; branches; next ; 1.7.22.1 date 2006.10.22.06.04.30; author yamt; state Exp; branches; next ; 1.6.4.1 date 2006.12.30.20.45.17; author yamt; state Exp; branches; next ; 1.5.2.1 date 2005.03.04.16.38.00; author skrll; state Exp; branches; next ; 1.5.10.1 date 2005.04.29.11.27.58; author kent; state Exp; branches; next ; 1.5.12.1 date 2005.03.19.08.32.44; author yamt; state Exp; branches; next ; 1.2.2.1 date 2000.12.14.08.49.50; author bouyer; state dead; branches; next 1.2.2.2; 1.2.2.2 date 2001.01.05.17.39.36; author bouyer; state Exp; branches; next ; 1.2.4.1 date 2003.01.07.20.44.54; author thorpej; state Exp; branches; next ; 1.1.1.1 date 2000.12.14.08.42.34; author thorpej; state Exp; branches; next ; desc @@ 1.8 log @Merge the peter-altq branch. (sync with KAME & add support for using ALTQ with pf(4)). @ text @/* $NetBSD: altq_hfsc.h,v 1.7.12.1 2006/03/18 12:08:18 peter Exp $ */ /* $KAME: altq_hfsc.h,v 1.12 2003/12/05 05:40:46 kjc Exp $ */ /* * Copyright (c) 1997-1999 Carnegie Mellon University. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software and * its documentation is hereby granted (including for commercial or * for-profit use), provided that both the copyright notice and this * permission notice appear in all copies of the software, derivative * works, or modified versions, and any portions thereof. * * THIS SOFTWARE IS EXPERIMENTAL AND IS KNOWN TO HAVE BUGS, SOME OF * WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON PROVIDES THIS * SOFTWARE IN ITS ``AS IS'' CONDITION, 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 CARNEGIE MELLON UNIVERSITY 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. * * Carnegie Mellon encourages (but does not require) users of this * software to return any improvements or extensions that they make, * and to grant Carnegie Mellon the rights to redistribute these * changes without encumbrance. */ #ifndef _ALTQ_ALTQ_HFSC_H_ #define _ALTQ_ALTQ_HFSC_H_ #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct service_curve { u_int m1; /* slope of the first segment in bits/sec */ u_int d; /* the x-projection of the first segment in msec */ u_int m2; /* slope of the second segment in bits/sec */ }; /* special class handles */ #define HFSC_NULLCLASS_HANDLE 0 #define HFSC_MAX_CLASSES 64 /* hfsc class flags */ #define HFCF_RED 0x0001 /* use RED */ #define HFCF_ECN 0x0002 /* use RED/ECN */ #define HFCF_RIO 0x0004 /* use RIO */ #define HFCF_CLEARDSCP 0x0010 /* clear diffserv codepoint */ #define HFCF_DEFAULTCLASS 0x1000 /* default class */ /* service curve types */ #define HFSC_REALTIMESC 1 #define HFSC_LINKSHARINGSC 2 #define HFSC_UPPERLIMITSC 4 #define HFSC_DEFAULTSC (HFSC_REALTIMESC|HFSC_LINKSHARINGSC) struct hfsc_classstats { u_int class_id; u_int32_t class_handle; struct service_curve rsc; struct service_curve fsc; struct service_curve usc; /* upper limit service curve */ u_int64_t total; /* total work in bytes */ u_int64_t cumul; /* cumulative work in bytes done by real-time criteria */ u_int64_t d; /* deadline */ u_int64_t e; /* eligible time */ u_int64_t vt; /* virtual time */ u_int64_t f; /* fit time for upper-limit */ /* info helpful for debugging */ u_int64_t initvt; /* init virtual time */ u_int64_t vtoff; /* cl_vt_ipoff */ u_int64_t cvtmax; /* cl_maxvt */ u_int64_t myf; /* cl_myf */ u_int64_t cfmin; /* cl_mincf */ u_int64_t cvtmin; /* cl_mincvt */ u_int64_t myfadj; /* cl_myfadj */ u_int64_t vtadj; /* cl_vtadj */ u_int64_t cur_time; u_int32_t machclk_freq; u_int qlength; u_int qlimit; struct pktcntr xmit_cnt; struct pktcntr drop_cnt; u_int period; u_int vtperiod; /* vt period sequence no */ u_int parentperiod; /* parent's vt period seqno */ int nactive; /* number of active children */ /* red and rio related info */ int qtype; struct redstats red[3]; }; #ifdef ALTQ3_COMPAT struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_int32_t parent_handle; struct service_curve service_curve; int qlimit; int flags; u_int32_t class_handle; /* return value */ }; struct hfsc_delete_class { struct hfsc_interface iface; u_int32_t class_handle; }; struct hfsc_modify_class { struct hfsc_interface iface; u_int32_t class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_int32_t class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; }; struct hfsc_class_stats { struct hfsc_interface iface; int nskip; /* skip # of classes */ int nclasses; /* # of class stats (WR) */ u_int64_t cur_time; /* current time */ u_int32_t machclk_freq; /* machine clock frequency */ u_int hif_classes; /* # of classes in the tree */ u_int hif_packets; /* # of packets in the tree */ struct hfsc_classstats *stats; /* pointer to stats array */ }; #define HFSC_IF_ATTACH _IOW('Q', 1, struct hfsc_attach) #define HFSC_IF_DETACH _IOW('Q', 2, struct hfsc_interface) #define HFSC_ENABLE _IOW('Q', 3, struct hfsc_interface) #define HFSC_DISABLE _IOW('Q', 4, struct hfsc_interface) #define HFSC_CLEAR_HIERARCHY _IOW('Q', 5, struct hfsc_interface) #define HFSC_ADD_CLASS _IOWR('Q', 7, struct hfsc_add_class) #define HFSC_DEL_CLASS _IOW('Q', 8, struct hfsc_delete_class) #define HFSC_MOD_CLASS _IOW('Q', 9, struct hfsc_modify_class) #define HFSC_ADD_FILTER _IOWR('Q', 10, struct hfsc_add_filter) #define HFSC_DEL_FILTER _IOW('Q', 11, struct hfsc_delete_filter) #define HFSC_GETSTATS _IOWR('Q', 12, struct hfsc_class_stats) #endif /* ALTQ3_COMPAT */ #ifdef _KERNEL /* * kernel internal service curve representation * coordinates are given by 64 bit unsigned integers. * x-axis: unit is clock count. for the intel x86 architecture, * the raw Pentium TSC (Timestamp Counter) value is used. * virtual time is also calculated in this time scale. * y-axis: unit is byte. * * the service curve parameters are converted to the internal * representation. * the slope values are scaled to avoid overflow. * the inverse slope values as well as the y-projection of the 1st * segment are kept in order to to avoid 64-bit divide operations * that are expensive on 32-bit architectures. * * note: Intel Pentium TSC never wraps around in several thousands of years. * x-axis doesn't wrap around for 1089 years with 1GHz clock. * y-axis doesn't wrap around for 4358 years with 1Gbps bandwidth. */ /* kernel internal representation of a service curve */ struct internal_sc { u_int64_t sm1; /* scaled slope of the 1st segment */ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ u_int64_t dx; /* the x-projection of the 1st segment */ u_int64_t dy; /* the y-projection of the 1st segment */ u_int64_t sm2; /* scaled slope of the 2nd segment */ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ }; /* runtime service curve */ struct runtime_sc { u_int64_t x; /* current starting position on x-axis */ u_int64_t y; /* current starting position on x-axis */ u_int64_t sm1; /* scaled slope of the 1st segment */ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ u_int64_t dx; /* the x-projection of the 1st segment */ u_int64_t dy; /* the y-projection of the 1st segment */ u_int64_t sm2; /* scaled slope of the 2nd segment */ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ }; /* for TAILQ based ellist and actlist implementation */ struct hfsc_class; typedef TAILQ_HEAD(_eligible, hfsc_class) ellist_t; typedef TAILQ_ENTRY(hfsc_class) elentry_t; typedef TAILQ_HEAD(_active, hfsc_class) actlist_t; typedef TAILQ_ENTRY(hfsc_class) actentry_t; #define ellist_first(s) TAILQ_FIRST(s) #define actlist_first(s) TAILQ_FIRST(s) #define actlist_last(s) TAILQ_LAST(s, _active) struct hfsc_class { u_int cl_id; /* class id (just for debug) */ u_int32_t cl_handle; /* class handle */ struct hfsc_if *cl_hif; /* back pointer to struct hfsc_if */ int cl_flags; /* misc flags */ struct hfsc_class *cl_parent; /* parent class */ struct hfsc_class *cl_siblings; /* sibling classes */ struct hfsc_class *cl_children; /* child classes */ class_queue_t *cl_q; /* class queue structure */ struct red *cl_red; /* RED state */ struct altq_pktattr *cl_pktattr; /* saved header used by ECN */ u_int64_t cl_total; /* total work in bytes */ u_int64_t cl_cumul; /* cumulative work in bytes done by real-time criteria */ u_int64_t cl_d; /* deadline */ u_int64_t cl_e; /* eligible time */ u_int64_t cl_vt; /* virtual time */ u_int64_t cl_f; /* time when this class will fit for link-sharing, max(myf, cfmin) */ u_int64_t cl_myf; /* my fit-time (as calculated from this class's own upperlimit curve) */ u_int64_t cl_myfadj; /* my fit-time adjustment (to cancel history dependence) */ u_int64_t cl_cfmin; /* earliest children's fit-time (used with cl_myf to obtain cl_f) */ u_int64_t cl_cvtmin; /* minimal virtual time among the children fit for link-sharing (monotonic within a period) */ u_int64_t cl_vtadj; /* intra-period cumulative vt adjustment */ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ u_int64_t cl_cvtmax; /* max child's vt in the last period */ u_int64_t cl_initvt; /* init virtual time (for debugging) */ struct internal_sc *cl_rsc; /* internal real-time service curve */ struct internal_sc *cl_fsc; /* internal fair service curve */ struct internal_sc *cl_usc; /* internal upperlimit service curve */ struct runtime_sc cl_deadline; /* deadline curve */ struct runtime_sc cl_eligible; /* eligible curve */ struct runtime_sc cl_virtual; /* virtual curve */ struct runtime_sc cl_ulimit; /* upperlimit curve */ u_int cl_vtperiod; /* vt period sequence no */ u_int cl_parentperiod; /* parent's vt period seqno */ int cl_nactive; /* number of active children */ actlist_t *cl_actc; /* active children list */ actentry_t cl_actlist; /* active children list entry */ elentry_t cl_ellist; /* eligible list entry */ struct { struct pktcntr xmit_cnt; struct pktcntr drop_cnt; u_int period; } cl_stats; }; /* * hfsc interface state */ struct hfsc_if { struct hfsc_if *hif_next; /* interface state list */ struct ifaltq *hif_ifq; /* backpointer to ifaltq */ struct hfsc_class *hif_rootclass; /* root class */ struct hfsc_class *hif_defaultclass; /* default class */ struct hfsc_class *hif_class_tbl[HFSC_MAX_CLASSES]; struct hfsc_class *hif_pollcache; /* cache for poll operation */ u_int hif_classes; /* # of classes in the tree */ u_int hif_packets; /* # of packets in the tree */ u_int hif_classid; /* class id sequence number */ ellist_t *hif_eligible; /* eligible list */ #ifdef ALTQ3_CLFIER_COMPAT struct acc_classifier hif_classifier; #endif }; #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _ALTQ_ALTQ_HFSC_H_ */ @ 1.7 log @merge ktrace-lwp. @ text @d1 2 a2 2 /* $NetBSD: altq_hfsc.h,v 1.5.2.1 2005/03/04 16:38:00 skrll Exp $ */ /* $KAME: altq_hfsc.h,v 1.6 2000/12/14 08:12:46 thorpej Exp $ */ d11 1 a11 4 * works, or modified versions, and any portions thereof, and that * both notices appear in supporting documentation, and that credit * is given to Carnegie Mellon University in all publications reporting * on direct or indirect use of this code or its derivatives. d45 66 a119 6 struct service_curve { u_int m1; /* slope of the first segment in bits/sec */ u_int d; /* the x-projection of the first segment in msec */ u_int m2; /* slope of the second segment in bits/sec */ }; d122 1 a122 1 u_long parent_handle; d127 1 a127 1 u_long class_handle; /* return value */ a129 11 /* special class handles */ #define HFSC_ROOTCLASS_HANDLE 0 #define HFSC_NULLCLASS_HANDLE 0 /* hfsc class flags */ #define HFCF_RED 0x0001 /* use RED */ #define HFCF_ECN 0x0002 /* use RED/ECN */ #define HFCF_RIO 0x0004 /* use RIO */ #define HFCF_CLEARDSCP 0x0010 /* clear diffserv codepoint */ #define HFCF_DEFAULTCLASS 0x1000 /* default class */ d132 1 a132 1 u_long class_handle; a134 5 /* service curve types */ #define HFSC_REALTIMESC 1 #define HFSC_LINKSHARINGSC 2 #define HFSC_DEFAULTSC (HFSC_REALTIMESC|HFSC_LINKSHARINGSC) d137 1 a137 1 u_long class_handle; d144 1 a144 1 u_long class_handle; a154 23 struct hfsc_basic_class_stats { u_int class_id; u_long class_handle; struct service_curve rsc; struct service_curve fsc; u_int64_t total; /* total work in bytes */ u_int64_t cumul; /* cumulative work in bytes done by real-time criteria */ u_int64_t d; /* deadline */ u_int64_t e; /* eligible time */ u_int64_t vt; /* virtual time */ u_int qlength; struct pktcntr xmit_cnt; struct pktcntr drop_cnt; u_int period; /* red and rio related info */ int qtype; struct redstats red[3]; }; d160 1 d163 1 a163 1 struct hfsc_basic_class_stats *stats; /* pointer to stats array */ d177 1 d234 1 a234 1 u_long cl_handle; /* class handle */ d252 17 d272 1 d276 1 d301 1 d310 1 d312 1 @ 1.7.20.1 log @Sync with head. @ text @d1 2 a2 2 /* $NetBSD: altq_hfsc.h,v 1.8 2006/10/12 19:59:08 peter Exp $ */ /* $KAME: altq_hfsc.h,v 1.12 2003/12/05 05:40:46 kjc Exp $ */ d11 4 a14 1 * works, or modified versions, and any portions thereof. d48 9 d63 10 d74 1 a75 1 #define HFSC_MAX_CLASSES 64 d84 5 a91 1 #define HFSC_UPPERLIMITSC 4 d94 21 a114 1 struct hfsc_classstats { d116 1 a116 1 u_int32_t class_handle; a118 1 struct service_curve usc; /* upper limit service curve */ a125 13 u_int64_t f; /* fit time for upper-limit */ /* info helpful for debugging */ u_int64_t initvt; /* init virtual time */ u_int64_t vtoff; /* cl_vt_ipoff */ u_int64_t cvtmax; /* cl_maxvt */ u_int64_t myf; /* cl_myf */ u_int64_t cfmin; /* cl_mincf */ u_int64_t cvtmin; /* cl_mincvt */ u_int64_t myfadj; /* cl_myfadj */ u_int64_t vtadj; /* cl_vtadj */ u_int64_t cur_time; u_int32_t machclk_freq; a127 1 u_int qlimit; d130 1 a130 5 u_int period; u_int vtperiod; /* vt period sequence no */ u_int parentperiod; /* parent's vt period seqno */ int nactive; /* number of active children */ d133 2 a134 47 int qtype; struct redstats red[3]; }; #ifdef ALTQ3_COMPAT struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_int32_t parent_handle; struct service_curve service_curve; int qlimit; int flags; u_int32_t class_handle; /* return value */ }; struct hfsc_delete_class { struct hfsc_interface iface; u_int32_t class_handle; }; struct hfsc_modify_class { struct hfsc_interface iface; u_int32_t class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_int32_t class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; a141 1 u_int32_t machclk_freq; /* machine clock frequency */ d144 1 a144 1 struct hfsc_classstats *stats; /* pointer to stats array */ a157 1 #endif /* ALTQ3_COMPAT */ d214 1 a214 1 u_int32_t cl_handle; /* class handle */ a231 17 u_int64_t cl_f; /* time when this class will fit for link-sharing, max(myf, cfmin) */ u_int64_t cl_myf; /* my fit-time (as calculated from this class's own upperlimit curve) */ u_int64_t cl_myfadj; /* my fit-time adjustment (to cancel history dependence) */ u_int64_t cl_cfmin; /* earliest children's fit-time (used with cl_myf to obtain cl_f) */ u_int64_t cl_cvtmin; /* minimal virtual time among the children fit for link-sharing (monotonic within a period) */ u_int64_t cl_vtadj; /* intra-period cumulative vt adjustment */ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ u_int64_t cl_cvtmax; /* max child's vt in the last period */ u_int64_t cl_initvt; /* init virtual time (for debugging) */ a234 1 struct internal_sc *cl_usc; /* internal upperlimit service curve */ a237 1 struct runtime_sc cl_ulimit; /* upperlimit curve */ a261 1 struct hfsc_class *hif_class_tbl[HFSC_MAX_CLASSES]; a269 1 #ifdef ALTQ3_CLFIER_COMPAT a270 1 #endif @ 1.7.22.1 log @sync with head @ text @d1 2 a2 2 /* $NetBSD$ */ /* $KAME: altq_hfsc.h,v 1.12 2003/12/05 05:40:46 kjc Exp $ */ d11 4 a14 1 * works, or modified versions, and any portions thereof. d48 9 d63 10 d74 1 a75 1 #define HFSC_MAX_CLASSES 64 d84 5 a91 1 #define HFSC_UPPERLIMITSC 4 d94 21 a114 1 struct hfsc_classstats { d116 1 a116 1 u_int32_t class_handle; a118 1 struct service_curve usc; /* upper limit service curve */ a125 13 u_int64_t f; /* fit time for upper-limit */ /* info helpful for debugging */ u_int64_t initvt; /* init virtual time */ u_int64_t vtoff; /* cl_vt_ipoff */ u_int64_t cvtmax; /* cl_maxvt */ u_int64_t myf; /* cl_myf */ u_int64_t cfmin; /* cl_mincf */ u_int64_t cvtmin; /* cl_mincvt */ u_int64_t myfadj; /* cl_myfadj */ u_int64_t vtadj; /* cl_vtadj */ u_int64_t cur_time; u_int32_t machclk_freq; a127 1 u_int qlimit; d130 1 a130 5 u_int period; u_int vtperiod; /* vt period sequence no */ u_int parentperiod; /* parent's vt period seqno */ int nactive; /* number of active children */ d133 2 a134 47 int qtype; struct redstats red[3]; }; #ifdef ALTQ3_COMPAT struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_int32_t parent_handle; struct service_curve service_curve; int qlimit; int flags; u_int32_t class_handle; /* return value */ }; struct hfsc_delete_class { struct hfsc_interface iface; u_int32_t class_handle; }; struct hfsc_modify_class { struct hfsc_interface iface; u_int32_t class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_int32_t class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; a141 1 u_int32_t machclk_freq; /* machine clock frequency */ d144 1 a144 1 struct hfsc_classstats *stats; /* pointer to stats array */ a157 1 #endif /* ALTQ3_COMPAT */ d214 1 a214 1 u_int32_t cl_handle; /* class handle */ a231 17 u_int64_t cl_f; /* time when this class will fit for link-sharing, max(myf, cfmin) */ u_int64_t cl_myf; /* my fit-time (as calculated from this class's own upperlimit curve) */ u_int64_t cl_myfadj; /* my fit-time adjustment (to cancel history dependence) */ u_int64_t cl_cfmin; /* earliest children's fit-time (used with cl_myf to obtain cl_f) */ u_int64_t cl_cvtmin; /* minimal virtual time among the children fit for link-sharing (monotonic within a period) */ u_int64_t cl_vtadj; /* intra-period cumulative vt adjustment */ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ u_int64_t cl_cvtmax; /* max child's vt in the last period */ u_int64_t cl_initvt; /* init virtual time (for debugging) */ a234 1 struct internal_sc *cl_usc; /* internal upperlimit service curve */ a237 1 struct runtime_sc cl_ulimit; /* upperlimit curve */ a261 1 struct hfsc_class *hif_class_tbl[HFSC_MAX_CLASSES]; a269 1 #ifdef ALTQ3_CLFIER_COMPAT a270 1 #endif @ 1.7.12.1 log @Sync with KAME. @ text @d1 2 a2 2 /* $NetBSD$ */ /* $KAME: altq_hfsc.h,v 1.12 2003/12/05 05:40:46 kjc Exp $ */ d11 4 a14 1 * works, or modified versions, and any portions thereof. d48 9 d63 10 d74 1 a75 1 #define HFSC_MAX_CLASSES 64 d84 5 a91 1 #define HFSC_UPPERLIMITSC 4 d94 21 a114 1 struct hfsc_classstats { d116 1 a116 1 u_int32_t class_handle; a118 1 struct service_curve usc; /* upper limit service curve */ a125 13 u_int64_t f; /* fit time for upper-limit */ /* info helpful for debugging */ u_int64_t initvt; /* init virtual time */ u_int64_t vtoff; /* cl_vt_ipoff */ u_int64_t cvtmax; /* cl_maxvt */ u_int64_t myf; /* cl_myf */ u_int64_t cfmin; /* cl_mincf */ u_int64_t cvtmin; /* cl_mincvt */ u_int64_t myfadj; /* cl_myfadj */ u_int64_t vtadj; /* cl_vtadj */ u_int64_t cur_time; u_int32_t machclk_freq; a127 1 u_int qlimit; d130 1 a130 5 u_int period; u_int vtperiod; /* vt period sequence no */ u_int parentperiod; /* parent's vt period seqno */ int nactive; /* number of active children */ d133 2 a134 47 int qtype; struct redstats red[3]; }; #ifdef ALTQ3_COMPAT struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_int32_t parent_handle; struct service_curve service_curve; int qlimit; int flags; u_int32_t class_handle; /* return value */ }; struct hfsc_delete_class { struct hfsc_interface iface; u_int32_t class_handle; }; struct hfsc_modify_class { struct hfsc_interface iface; u_int32_t class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_int32_t class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; a141 1 u_int32_t machclk_freq; /* machine clock frequency */ d144 1 a144 1 struct hfsc_classstats *stats; /* pointer to stats array */ a157 1 #endif /* ALTQ3_COMPAT */ d214 1 a214 1 u_int32_t cl_handle; /* class handle */ a231 17 u_int64_t cl_f; /* time when this class will fit for link-sharing, max(myf, cfmin) */ u_int64_t cl_myf; /* my fit-time (as calculated from this class's own upperlimit curve) */ u_int64_t cl_myfadj; /* my fit-time adjustment (to cancel history dependence) */ u_int64_t cl_cfmin; /* earliest children's fit-time (used with cl_myf to obtain cl_f) */ u_int64_t cl_cvtmin; /* minimal virtual time among the children fit for link-sharing (monotonic within a period) */ u_int64_t cl_vtadj; /* intra-period cumulative vt adjustment */ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ u_int64_t cl_cvtmax; /* max child's vt in the last period */ u_int64_t cl_initvt; /* init virtual time (for debugging) */ a234 1 struct internal_sc *cl_usc; /* internal upperlimit service curve */ a237 1 struct runtime_sc cl_ulimit; /* upperlimit curve */ a261 1 struct hfsc_class *hif_class_tbl[HFSC_MAX_CLASSES]; a269 1 #ifdef ALTQ3_CLFIER_COMPAT a270 1 #endif @ 1.6 log @nuke trailing whitespace @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.5 2003/01/06 15:20:24 christos Exp $ */ @ 1.6.4.1 log @sync with head. @ text @d1 2 a2 2 /* $NetBSD$ */ /* $KAME: altq_hfsc.h,v 1.12 2003/12/05 05:40:46 kjc Exp $ */ d11 4 a14 1 * works, or modified versions, and any portions thereof. d48 9 d63 10 d74 1 a75 1 #define HFSC_MAX_CLASSES 64 d84 5 a91 1 #define HFSC_UPPERLIMITSC 4 d94 21 a114 1 struct hfsc_classstats { d116 1 a116 1 u_int32_t class_handle; a118 1 struct service_curve usc; /* upper limit service curve */ a125 13 u_int64_t f; /* fit time for upper-limit */ /* info helpful for debugging */ u_int64_t initvt; /* init virtual time */ u_int64_t vtoff; /* cl_vt_ipoff */ u_int64_t cvtmax; /* cl_maxvt */ u_int64_t myf; /* cl_myf */ u_int64_t cfmin; /* cl_mincf */ u_int64_t cvtmin; /* cl_mincvt */ u_int64_t myfadj; /* cl_myfadj */ u_int64_t vtadj; /* cl_vtadj */ u_int64_t cur_time; u_int32_t machclk_freq; a127 1 u_int qlimit; d130 1 a130 5 u_int period; u_int vtperiod; /* vt period sequence no */ u_int parentperiod; /* parent's vt period seqno */ int nactive; /* number of active children */ d133 2 a134 47 int qtype; struct redstats red[3]; }; #ifdef ALTQ3_COMPAT struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_int32_t parent_handle; struct service_curve service_curve; int qlimit; int flags; u_int32_t class_handle; /* return value */ }; struct hfsc_delete_class { struct hfsc_interface iface; u_int32_t class_handle; }; struct hfsc_modify_class { struct hfsc_interface iface; u_int32_t class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_int32_t class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; a141 1 u_int32_t machclk_freq; /* machine clock frequency */ d144 1 a144 1 struct hfsc_classstats *stats; /* pointer to stats array */ a157 1 #endif /* ALTQ3_COMPAT */ d214 1 a214 1 u_int32_t cl_handle; /* class handle */ a231 17 u_int64_t cl_f; /* time when this class will fit for link-sharing, max(myf, cfmin) */ u_int64_t cl_myf; /* my fit-time (as calculated from this class's own upperlimit curve) */ u_int64_t cl_myfadj; /* my fit-time adjustment (to cancel history dependence) */ u_int64_t cl_cfmin; /* earliest children's fit-time (used with cl_myf to obtain cl_f) */ u_int64_t cl_cvtmin; /* minimal virtual time among the children fit for link-sharing (monotonic within a period) */ u_int64_t cl_vtadj; /* intra-period cumulative vt adjustment */ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ u_int64_t cl_cvtmax; /* max child's vt in the last period */ u_int64_t cl_initvt; /* init virtual time (for debugging) */ a234 1 struct internal_sc *cl_usc; /* internal upperlimit service curve */ a237 1 struct runtime_sc cl_ulimit; /* upperlimit curve */ a261 1 struct hfsc_class *hif_class_tbl[HFSC_MAX_CLASSES]; a269 1 #ifdef ALTQ3_CLFIER_COMPAT a270 1 #endif @ 1.5 log @fix typo, from David Laight. @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.4 2003/01/06 14:09:42 christos Exp $ */ d46 1 a46 1 #endif d267 1 a267 1 d277 1 a277 1 #endif @ 1.5.10.1 log @sync with -current @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.6 2005/02/26 23:04:16 perry Exp $ */ d46 1 a46 1 #endif d267 1 a267 1 d277 1 a277 1 #endif @ 1.5.12.1 log @sync with head. xen and whitespace. xen part is not finished. @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.5 2003/01/06 15:20:24 christos Exp $ */ d46 1 a46 1 #endif d267 1 a267 1 d277 1 a277 1 #endif @ 1.5.2.1 log @Sync with HEAD. Hi Perry! @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.6 2005/02/26 23:04:16 perry Exp $ */ d46 1 a46 1 #endif d267 1 a267 1 d277 1 a277 1 #endif @ 1.4 log @oops, forgot to rename two struct refs. @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.3 2003/01/06 03:44:24 christos Exp $ */ d144 1 a144 1 struct hsfc_basic_class_stats *stats; /* pointer to stats array */ @ 1.3 log @avoid name collision [class_stats] @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.2 2000/12/14 08:49:50 thorpej Exp $ */ d144 1 a144 1 struct _hsfc_class_stats_ *stats; /* pointer to stats array */ @ 1.2 log @Add NetBSD RCS IDs. @ text @d1 1 a1 1 /* $NetBSD$ */ d114 1 a114 1 struct class_stats { d144 1 a144 1 struct class_stats *stats; /* pointer to stats array */ @ 1.2.2.1 log @file altq_hfsc.h was added on branch thorpej_scsipi on 2001-01-05 17:39:36 +0000 @ text @d1 279 @ 1.2.2.2 log @Sync with HEAD @ text @a0 279 /* $NetBSD: altq_hfsc.h,v 1.2.2.1 2001/01/05 17:39:36 bouyer Exp $ */ /* $KAME: altq_hfsc.h,v 1.6 2000/12/14 08:12:46 thorpej Exp $ */ /* * Copyright (c) 1997-1999 Carnegie Mellon University. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software and * its documentation is hereby granted (including for commercial or * for-profit use), provided that both the copyright notice and this * permission notice appear in all copies of the software, derivative * works, or modified versions, and any portions thereof, and that * both notices appear in supporting documentation, and that credit * is given to Carnegie Mellon University in all publications reporting * on direct or indirect use of this code or its derivatives. * * THIS SOFTWARE IS EXPERIMENTAL AND IS KNOWN TO HAVE BUGS, SOME OF * WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON PROVIDES THIS * SOFTWARE IN ITS ``AS IS'' CONDITION, 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 CARNEGIE MELLON UNIVERSITY 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. * * Carnegie Mellon encourages (but does not require) users of this * software to return any improvements or extensions that they make, * and to grant Carnegie Mellon the rights to redistribute these * changes without encumbrance. */ #ifndef _ALTQ_ALTQ_HFSC_H_ #define _ALTQ_ALTQ_HFSC_H_ #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct hfsc_interface { char hfsc_ifname[IFNAMSIZ]; /* interface name (e.g., fxp0) */ }; struct hfsc_attach { struct hfsc_interface iface; u_int bandwidth; /* link bandwidth in bits/sec */ }; struct service_curve { u_int m1; /* slope of the first segment in bits/sec */ u_int d; /* the x-projection of the first segment in msec */ u_int m2; /* slope of the second segment in bits/sec */ }; struct hfsc_add_class { struct hfsc_interface iface; u_long parent_handle; struct service_curve service_curve; int qlimit; int flags; u_long class_handle; /* return value */ }; /* special class handles */ #define HFSC_ROOTCLASS_HANDLE 0 #define HFSC_NULLCLASS_HANDLE 0 /* hfsc class flags */ #define HFCF_RED 0x0001 /* use RED */ #define HFCF_ECN 0x0002 /* use RED/ECN */ #define HFCF_RIO 0x0004 /* use RIO */ #define HFCF_CLEARDSCP 0x0010 /* clear diffserv codepoint */ #define HFCF_DEFAULTCLASS 0x1000 /* default class */ struct hfsc_delete_class { struct hfsc_interface iface; u_long class_handle; }; /* service curve types */ #define HFSC_REALTIMESC 1 #define HFSC_LINKSHARINGSC 2 #define HFSC_DEFAULTSC (HFSC_REALTIMESC|HFSC_LINKSHARINGSC) struct hfsc_modify_class { struct hfsc_interface iface; u_long class_handle; struct service_curve service_curve; int sctype; }; struct hfsc_add_filter { struct hfsc_interface iface; u_long class_handle; struct flow_filter filter; u_long filter_handle; /* return value */ }; struct hfsc_delete_filter { struct hfsc_interface iface; u_long filter_handle; }; struct class_stats { u_int class_id; u_long class_handle; struct service_curve rsc; struct service_curve fsc; u_int64_t total; /* total work in bytes */ u_int64_t cumul; /* cumulative work in bytes done by real-time criteria */ u_int64_t d; /* deadline */ u_int64_t e; /* eligible time */ u_int64_t vt; /* virtual time */ u_int qlength; struct pktcntr xmit_cnt; struct pktcntr drop_cnt; u_int period; /* red and rio related info */ int qtype; struct redstats red[3]; }; struct hfsc_class_stats { struct hfsc_interface iface; int nskip; /* skip # of classes */ int nclasses; /* # of class stats (WR) */ u_int64_t cur_time; /* current time */ u_int hif_classes; /* # of classes in the tree */ u_int hif_packets; /* # of packets in the tree */ struct class_stats *stats; /* pointer to stats array */ }; #define HFSC_IF_ATTACH _IOW('Q', 1, struct hfsc_attach) #define HFSC_IF_DETACH _IOW('Q', 2, struct hfsc_interface) #define HFSC_ENABLE _IOW('Q', 3, struct hfsc_interface) #define HFSC_DISABLE _IOW('Q', 4, struct hfsc_interface) #define HFSC_CLEAR_HIERARCHY _IOW('Q', 5, struct hfsc_interface) #define HFSC_ADD_CLASS _IOWR('Q', 7, struct hfsc_add_class) #define HFSC_DEL_CLASS _IOW('Q', 8, struct hfsc_delete_class) #define HFSC_MOD_CLASS _IOW('Q', 9, struct hfsc_modify_class) #define HFSC_ADD_FILTER _IOWR('Q', 10, struct hfsc_add_filter) #define HFSC_DEL_FILTER _IOW('Q', 11, struct hfsc_delete_filter) #define HFSC_GETSTATS _IOWR('Q', 12, struct hfsc_class_stats) #ifdef _KERNEL /* * kernel internal service curve representation * coordinates are given by 64 bit unsigned integers. * x-axis: unit is clock count. for the intel x86 architecture, * the raw Pentium TSC (Timestamp Counter) value is used. * virtual time is also calculated in this time scale. * y-axis: unit is byte. * * the service curve parameters are converted to the internal * representation. * the slope values are scaled to avoid overflow. * the inverse slope values as well as the y-projection of the 1st * segment are kept in order to to avoid 64-bit divide operations * that are expensive on 32-bit architectures. * * note: Intel Pentium TSC never wraps around in several thousands of years. * x-axis doesn't wrap around for 1089 years with 1GHz clock. * y-axis doesn't wrap around for 4358 years with 1Gbps bandwidth. */ /* kernel internal representation of a service curve */ struct internal_sc { u_int64_t sm1; /* scaled slope of the 1st segment */ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ u_int64_t dx; /* the x-projection of the 1st segment */ u_int64_t dy; /* the y-projection of the 1st segment */ u_int64_t sm2; /* scaled slope of the 2nd segment */ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ }; /* runtime service curve */ struct runtime_sc { u_int64_t x; /* current starting position on x-axis */ u_int64_t y; /* current starting position on x-axis */ u_int64_t sm1; /* scaled slope of the 1st segment */ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ u_int64_t dx; /* the x-projection of the 1st segment */ u_int64_t dy; /* the y-projection of the 1st segment */ u_int64_t sm2; /* scaled slope of the 2nd segment */ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ }; /* for TAILQ based ellist and actlist implementation */ struct hfsc_class; typedef TAILQ_HEAD(_eligible, hfsc_class) ellist_t; typedef TAILQ_ENTRY(hfsc_class) elentry_t; typedef TAILQ_HEAD(_active, hfsc_class) actlist_t; typedef TAILQ_ENTRY(hfsc_class) actentry_t; #define ellist_first(s) TAILQ_FIRST(s) #define actlist_first(s) TAILQ_FIRST(s) #define actlist_last(s) TAILQ_LAST(s, _active) struct hfsc_class { u_int cl_id; /* class id (just for debug) */ u_long cl_handle; /* class handle */ struct hfsc_if *cl_hif; /* back pointer to struct hfsc_if */ int cl_flags; /* misc flags */ struct hfsc_class *cl_parent; /* parent class */ struct hfsc_class *cl_siblings; /* sibling classes */ struct hfsc_class *cl_children; /* child classes */ class_queue_t *cl_q; /* class queue structure */ struct red *cl_red; /* RED state */ struct altq_pktattr *cl_pktattr; /* saved header used by ECN */ u_int64_t cl_total; /* total work in bytes */ u_int64_t cl_cumul; /* cumulative work in bytes done by real-time criteria */ u_int64_t cl_d; /* deadline */ u_int64_t cl_e; /* eligible time */ u_int64_t cl_vt; /* virtual time */ struct internal_sc *cl_rsc; /* internal real-time service curve */ struct internal_sc *cl_fsc; /* internal fair service curve */ struct runtime_sc cl_deadline; /* deadline curve */ struct runtime_sc cl_eligible; /* eligible curve */ struct runtime_sc cl_virtual; /* virtual curve */ u_int cl_vtperiod; /* vt period sequence no */ u_int cl_parentperiod; /* parent's vt period seqno */ int cl_nactive; /* number of active children */ actlist_t *cl_actc; /* active children list */ actentry_t cl_actlist; /* active children list entry */ elentry_t cl_ellist; /* eligible list entry */ struct { struct pktcntr xmit_cnt; struct pktcntr drop_cnt; u_int period; } cl_stats; }; /* * hfsc interface state */ struct hfsc_if { struct hfsc_if *hif_next; /* interface state list */ struct ifaltq *hif_ifq; /* backpointer to ifaltq */ struct hfsc_class *hif_rootclass; /* root class */ struct hfsc_class *hif_defaultclass; /* default class */ struct hfsc_class *hif_pollcache; /* cache for poll operation */ u_int hif_classes; /* # of classes in the tree */ u_int hif_packets; /* # of packets in the tree */ u_int hif_classid; /* class id sequence number */ ellist_t *hif_eligible; /* eligible list */ struct acc_classifier hif_classifier; }; #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _ALTQ_ALTQ_HFSC_H_ */ @ 1.2.4.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: altq_hfsc.h,v 1.2 2000/12/14 08:49:50 thorpej Exp $ */ d114 1 a114 1 struct hfsc_basic_class_stats { d144 1 a144 1 struct hfsc_basic_class_stats *stats; /* pointer to stats array */ @ 1.1 log @Initial revision @ text @d1 1 @ 1.1.1.1 log @Import ALTQ from KAME. @ text @@