head 1.20; access; symbols netbsd-10-0-RELEASE:1.20 netbsd-10-0-RC6:1.20 netbsd-10-0-RC5:1.20 netbsd-10-0-RC4:1.20 netbsd-10-0-RC3:1.20 netbsd-10-0-RC2:1.20 thorpej-ifq:1.20.0.8 thorpej-ifq-base:1.20 thorpej-altq-separation:1.20.0.6 thorpej-altq-separation-base:1.20 netbsd-10-0-RC1:1.20 netbsd-10:1.20.0.4 netbsd-10-base:1.20 bouyer-sunxi-drm:1.20.0.2 bouyer-sunxi-drm-base:1.20 netbsd-9-3-RELEASE:1.19 thorpej-i2c-spi-conf2:1.19.0.28 thorpej-i2c-spi-conf2-base:1.19 thorpej-futex2:1.19.0.26 thorpej-futex2-base:1.19 thorpej-cfargs2:1.19.0.24 thorpej-cfargs2-base:1.19 cjep_sun2x-base1:1.19 cjep_sun2x:1.19.0.22 cjep_sun2x-base:1.19 cjep_staticlib_x-base1:1.19 netbsd-9-2-RELEASE:1.19 cjep_staticlib_x:1.19.0.20 cjep_staticlib_x-base:1.19 thorpej-i2c-spi-conf:1.19.0.18 thorpej-i2c-spi-conf-base:1.19 thorpej-cfargs:1.19.0.16 thorpej-cfargs-base:1.19 thorpej-futex:1.19.0.14 thorpej-futex-base:1.19 netbsd-9-1-RELEASE:1.19 bouyer-xenpvh-base2:1.19 phil-wifi-20200421:1.19 bouyer-xenpvh-base1:1.19 phil-wifi-20200411:1.19 bouyer-xenpvh:1.19.0.12 bouyer-xenpvh-base:1.19 is-mlppp:1.19.0.10 is-mlppp-base:1.19 phil-wifi-20200406:1.19 netbsd-8-2-RELEASE:1.17 ad-namecache-base3:1.19 netbsd-9-0-RELEASE:1.19 netbsd-9-0-RC2:1.19 ad-namecache-base2:1.19 ad-namecache-base1:1.19 ad-namecache:1.19.0.8 ad-namecache-base:1.19 netbsd-9-0-RC1:1.19 phil-wifi-20191119:1.19 netbsd-9:1.19.0.6 netbsd-9-base:1.19 phil-wifi-20190609:1.19 netbsd-8-1-RELEASE:1.17 netbsd-8-1-RC1:1.17 isaki-audio2:1.19.0.4 isaki-audio2-base:1.19 pgoyette-compat-merge-20190127:1.18.2.1 pgoyette-compat-20190127:1.19 pgoyette-compat-20190118:1.19 pgoyette-compat-1226:1.19 pgoyette-compat-1126:1.19 pgoyette-compat-1020:1.19 pgoyette-compat-0930:1.19 pgoyette-compat-0906:1.19 netbsd-7-2-RELEASE:1.17 pgoyette-compat-0728:1.19 netbsd-8-0-RELEASE:1.17 phil-wifi:1.19.0.2 phil-wifi-base:1.19 pgoyette-compat-0625:1.19 netbsd-8-0-RC2:1.17 pgoyette-compat-0521:1.19 pgoyette-compat-0502:1.18 pgoyette-compat-0422:1.18 netbsd-8-0-RC1:1.17 pgoyette-compat-0415:1.18 pgoyette-compat-0407:1.18 pgoyette-compat-0330:1.18 pgoyette-compat-0322:1.18 pgoyette-compat-0315:1.18 netbsd-7-1-2-RELEASE:1.17 pgoyette-compat:1.18.0.2 pgoyette-compat-base:1.18 netbsd-7-1-1-RELEASE:1.17 tls-maxphys-base-20171202:1.17 matt-nb8-mediatek:1.17.0.60 matt-nb8-mediatek-base:1.17 nick-nhusb-base-20170825:1.17 perseant-stdc-iso10646:1.17.0.58 perseant-stdc-iso10646-base:1.17 netbsd-8:1.17.0.56 netbsd-8-base:1.17 prg-localcount2-base3:1.17 prg-localcount2-base2:1.17 prg-localcount2-base1:1.17 prg-localcount2:1.17.0.54 prg-localcount2-base:1.17 pgoyette-localcount-20170426:1.17 bouyer-socketcan-base1:1.17 jdolecek-ncq:1.17.0.52 jdolecek-ncq-base:1.17 pgoyette-localcount-20170320:1.17 netbsd-7-1:1.17.0.50 netbsd-7-1-RELEASE:1.17 netbsd-7-1-RC2:1.17 nick-nhusb-base-20170204:1.17 netbsd-7-nhusb-base-20170116:1.17 bouyer-socketcan:1.17.0.48 bouyer-socketcan-base:1.17 pgoyette-localcount-20170107:1.17 netbsd-7-1-RC1:1.17 nick-nhusb-base-20161204:1.17 pgoyette-localcount-20161104:1.17 netbsd-7-0-2-RELEASE:1.17 nick-nhusb-base-20161004:1.17 localcount-20160914:1.17 netbsd-7-nhusb:1.17.0.46 netbsd-7-nhusb-base:1.17 pgoyette-localcount-20160806:1.17 pgoyette-localcount-20160726:1.17 pgoyette-localcount:1.17.0.44 pgoyette-localcount-base:1.17 nick-nhusb-base-20160907:1.17 nick-nhusb-base-20160529:1.17 netbsd-7-0-1-RELEASE:1.17 nick-nhusb-base-20160422:1.17 nick-nhusb-base-20160319:1.17 nick-nhusb-base-20151226:1.17 netbsd-7-0:1.17.0.42 netbsd-7-0-RELEASE:1.17 nick-nhusb-base-20150921:1.17 netbsd-7-0-RC3:1.17 netbsd-7-0-RC2:1.17 netbsd-7-0-RC1:1.17 nick-nhusb-base-20150606:1.17 nick-nhusb-base-20150406:1.17 nick-nhusb:1.17.0.40 nick-nhusb-base:1.17 netbsd-5-2-3-RELEASE:1.15 netbsd-5-1-5-RELEASE:1.15 netbsd-6-0-6-RELEASE:1.17 netbsd-6-1-5-RELEASE:1.17 netbsd-7:1.17.0.38 netbsd-7-base:1.17 yamt-pagecache-base9:1.17 yamt-pagecache-tag8:1.17 netbsd-6-1-4-RELEASE:1.17 netbsd-6-0-5-RELEASE:1.17 tls-earlyentropy:1.17.0.36 tls-earlyentropy-base:1.17 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.17 riastradh-drm2-base3:1.17 netbsd-6-1-3-RELEASE:1.17 netbsd-6-0-4-RELEASE:1.17 netbsd-5-2-2-RELEASE:1.15 netbsd-5-1-4-RELEASE:1.15 netbsd-6-1-2-RELEASE:1.17 netbsd-6-0-3-RELEASE:1.17 netbsd-5-2-1-RELEASE:1.15 netbsd-5-1-3-RELEASE:1.15 rmind-smpnet-nbase:1.17 netbsd-6-1-1-RELEASE:1.17 riastradh-drm2-base2:1.17 riastradh-drm2-base1:1.17 riastradh-drm2:1.17.0.34 riastradh-drm2-base:1.17 rmind-smpnet:1.17.0.26 rmind-smpnet-base:1.17 netbsd-6-1:1.17.0.32 netbsd-6-0-2-RELEASE:1.17 netbsd-6-1-RELEASE:1.17 khorben-n900:1.17.0.30 netbsd-6-1-RC4:1.17 netbsd-6-1-RC3:1.17 agc-symver:1.17.0.28 agc-symver-base:1.17 netbsd-6-1-RC2:1.17 netbsd-6-1-RC1:1.17 yamt-pagecache-base8:1.17 netbsd-5-2:1.15.0.18 netbsd-6-0-1-RELEASE:1.17 yamt-pagecache-base7:1.17 netbsd-5-2-RELEASE:1.15 netbsd-5-2-RC1:1.15 matt-nb6-plus-nbase:1.17 yamt-pagecache-base6:1.17 netbsd-6-0:1.17.0.24 netbsd-6-0-RELEASE:1.17 netbsd-6-0-RC2:1.17 tls-maxphys:1.17.0.22 tls-maxphys-base:1.17 matt-nb6-plus:1.17.0.20 matt-nb6-plus-base:1.17 netbsd-6-0-RC1:1.17 jmcneill-usbmp-base10:1.17 yamt-pagecache-base5:1.17 jmcneill-usbmp-base9:1.17 yamt-pagecache-base4:1.17 jmcneill-usbmp-base8:1.17 jmcneill-usbmp-base7:1.17 jmcneill-usbmp-base6:1.17 jmcneill-usbmp-base5:1.17 jmcneill-usbmp-base4:1.17 jmcneill-usbmp-base3:1.17 jmcneill-usbmp-pre-base2:1.17 jmcneill-usbmp-base2:1.17 netbsd-6:1.17.0.18 netbsd-6-base:1.17 netbsd-5-1-2-RELEASE:1.15 netbsd-5-1-1-RELEASE:1.15 jmcneill-usbmp:1.17.0.16 jmcneill-usbmp-base:1.17 jmcneill-audiomp3:1.17.0.14 jmcneill-audiomp3-base:1.17 yamt-pagecache-base3:1.17 yamt-pagecache-base2:1.17 yamt-pagecache:1.17.0.12 yamt-pagecache-base:1.17 rmind-uvmplock-nbase:1.17 cherry-xenmp:1.17.0.10 cherry-xenmp-base:1.17 bouyer-quota2-nbase:1.17 bouyer-quota2:1.17.0.8 bouyer-quota2-base:1.17 jruoho-x86intr:1.17.0.6 jruoho-x86intr-base:1.17 matt-mips64-premerge-20101231:1.17 matt-nb5-mips64-premerge-20101231:1.15 matt-nb5-pq3:1.15.0.16 matt-nb5-pq3-base:1.15 netbsd-5-1:1.15.0.14 netbsd-5-1-RELEASE:1.15 uebayasi-xip-base4:1.17 uebayasi-xip-base3:1.17 yamt-nfs-mp-base11:1.17 netbsd-5-1-RC4:1.15 matt-nb5-mips64-k15:1.15 uebayasi-xip-base2:1.17 yamt-nfs-mp-base10:1.17 netbsd-5-1-RC3:1.15 netbsd-5-1-RC2:1.15 uebayasi-xip-base1:1.17 netbsd-5-1-RC1:1.15 rmind-uvmplock:1.17.0.4 rmind-uvmplock-base:1.17 yamt-nfs-mp-base9:1.17 uebayasi-xip:1.17.0.2 uebayasi-xip-base:1.17 netbsd-5-0-2-RELEASE:1.15 matt-nb5-mips64-premerge-20091211:1.15 matt-premerge-20091211:1.17 yamt-nfs-mp-base8:1.17 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.15 matt-nb4-mips64-k7-u2a-k9b:1.15 matt-nb5-mips64-u1-k1-k5:1.15 yamt-nfs-mp-base7:1.17 matt-nb5-mips64:1.15.0.12 netbsd-5-0-1-RELEASE:1.15 jymxensuspend-base:1.17 yamt-nfs-mp-base6:1.17 yamt-nfs-mp-base5:1.17 yamt-nfs-mp-base4:1.17 jym-xensuspend-nbase:1.17 yamt-nfs-mp-base3:1.17 nick-hppapmap-base4:1.17 nick-hppapmap-base3:1.17 netbsd-5-0:1.15.0.10 netbsd-5-0-RELEASE:1.15 netbsd-5-0-RC4:1.15 netbsd-5-0-RC3:1.15 nick-hppapmap-base2:1.15 netbsd-5-0-RC2:1.15 jym-xensuspend:1.15.0.8 jym-xensuspend-base:1.17 netbsd-5-0-RC1:1.15 haad-dm-base2:1.15 haad-nbase2:1.15 ad-audiomp2:1.15.0.6 ad-audiomp2-base:1.15 netbsd-5:1.15.0.4 netbsd-5-base:1.15 nick-hppapmap:1.15.0.2 nick-hppapmap-base:1.17 matt-mips64-base2:1.15 matt-mips64:1.12.0.14 haad-dm-base1:1.15 wrstuden-revivesa-base-4:1.15 netbsd-4-0-1-RELEASE:1.10 wrstuden-revivesa-base-3:1.15 wrstuden-revivesa-base-2:1.15 wrstuden-fixsa-newbase:1.10 nick-csl-alignment-base5:1.12 haad-dm:1.14.0.2 haad-dm-base:1.15 wrstuden-revivesa-base-1:1.13 simonb-wapbl-nbase:1.14 yamt-pf42-base4:1.13 simonb-wapbl:1.13.0.24 simonb-wapbl-base:1.14 yamt-pf42-base3:1.13 hpcarm-cleanup-nbase:1.13 yamt-pf42-baseX:1.13 yamt-pf42-base2:1.13 yamt-nfs-mp-base2:1.13 wrstuden-revivesa:1.13.0.22 wrstuden-revivesa-base:1.13 yamt-nfs-mp:1.13.0.20 yamt-nfs-mp-base:1.13 yamt-pf42:1.13.0.18 yamt-pf42-base:1.13 ad-socklock-base1:1.13 yamt-lazymbuf-base15:1.13 yamt-lazymbuf-base14:1.13 keiichi-mipv6-nbase:1.13 mjf-devfs2:1.13.0.16 mjf-devfs2-base:1.15 nick-net80211-sync:1.13.0.14 nick-net80211-sync-base:1.13 keiichi-mipv6:1.13.0.12 keiichi-mipv6-base:1.13 bouyer-xeni386-merge1:1.13 matt-armv6-prevmlocking:1.12.8.1 wrstuden-fixsa-base-1:1.10 vmlocking2-base3:1.13 netbsd-4-0:1.10.0.34 netbsd-4-0-RELEASE:1.10 bouyer-xeni386-nbase:1.13 yamt-kmem-base3:1.13 cube-autoconf:1.13.0.10 cube-autoconf-base:1.13 yamt-kmem-base2:1.13 bouyer-xeni386:1.13.0.8 bouyer-xeni386-base:1.13 yamt-kmem:1.13.0.6 yamt-kmem-base:1.13 vmlocking2-base2:1.13 reinoud-bufcleanup-nbase:1.13 vmlocking2:1.13.0.4 vmlocking2-base1:1.13 netbsd-4-0-RC5:1.10 matt-nb4-arm:1.10.0.32 matt-nb4-arm-base:1.10 matt-armv6-nbase:1.13 jmcneill-base:1.13 netbsd-4-0-RC4:1.10 mjf-devfs:1.13.0.2 mjf-devfs-base:1.13 bouyer-xenamd64-base2:1.13 vmlocking-nbase:1.13 yamt-x86pmap-base4:1.12 bouyer-xenamd64:1.12.0.12 bouyer-xenamd64-base:1.13 netbsd-4-0-RC3:1.10 yamt-x86pmap-base3:1.12 yamt-x86pmap-base2:1.12 netbsd-4-0-RC2:1.10 yamt-x86pmap:1.12.0.10 yamt-x86pmap-base:1.12 netbsd-4-0-RC1:1.10 matt-armv6:1.12.0.8 matt-armv6-base:1.13 matt-mips64-base:1.12 jmcneill-pm:1.12.0.6 jmcneill-pm-base:1.13 hpcarm-cleanup:1.12.0.4 hpcarm-cleanup-base:1.13 nick-csl-alignment:1.12.0.2 nick-csl-alignment-base:1.12 netbsd-3-1-1-RELEASE:1.9 netbsd-3-0-3-RELEASE:1.9 yamt-idlelwp-base8:1.12 wrstuden-fixsa:1.10.0.30 wrstuden-fixsa-base:1.10 thorpej-atomic:1.11.0.8 thorpej-atomic-base:1.11 reinoud-bufcleanup:1.11.0.6 reinoud-bufcleanup-base:1.13 mjf-ufs-trans:1.11.0.4 mjf-ufs-trans-base:1.12 vmlocking:1.11.0.2 vmlocking-base:1.12 ad-audiomp:1.10.0.28 ad-audiomp-base:1.10 yamt-idlelwp:1.10.0.26 post-newlock2-merge:1.10 newlock2-nbase:1.10 yamt-splraiseipl-base5:1.10 yamt-splraiseipl-base4:1.10 yamt-splraiseipl-base3:1.10 abandoned-netbsd-4-base:1.10 abandoned-netbsd-4:1.10.0.18 netbsd-3-1:1.9.0.28 netbsd-3-1-RELEASE:1.9 netbsd-3-0-2-RELEASE:1.9 yamt-splraiseipl-base2:1.10 netbsd-3-1-RC4:1.9 yamt-splraiseipl:1.10.0.22 yamt-splraiseipl-base:1.10 netbsd-3-1-RC3:1.9 yamt-pdpolicy-base9:1.10 newlock2:1.10.0.20 newlock2-base:1.10 yamt-pdpolicy-base8:1.10 netbsd-3-1-RC2:1.9 netbsd-3-1-RC1:1.9 yamt-pdpolicy-base7:1.10 netbsd-4:1.10.0.24 netbsd-4-base:1.10 yamt-pdpolicy-base6:1.10 chap-midi-nbase:1.10 netbsd-3-0-1-RELEASE:1.9 gdamore-uart:1.10.0.16 gdamore-uart-base:1.10 simonb-timcounters-final:1.10 yamt-pdpolicy-base5:1.10 chap-midi:1.10.0.14 chap-midi-base:1.10 yamt-pdpolicy-base4:1.10 yamt-pdpolicy-base3:1.10 peter-altq-base:1.10 peter-altq:1.10.0.12 yamt-pdpolicy-base2:1.10 elad-kernelauth-base:1.10 elad-kernelauth:1.10.0.10 yamt-pdpolicy:1.10.0.8 yamt-pdpolicy-base:1.10 yamt-uio_vmspace-base5:1.10 simonb-timecounters:1.10.0.6 simonb-timecounters-base:1.10 rpaulo-netinet-merge-pcb:1.10.0.4 rpaulo-netinet-merge-pcb-base:1.10 yamt-uio_vmspace:1.10.0.2 netbsd-3-0:1.9.0.26 netbsd-3-0-RELEASE:1.9 netbsd-3-0-RC6:1.9 yamt-readahead-base3:1.9 netbsd-3-0-RC5:1.9 netbsd-3-0-RC4:1.9 netbsd-3-0-RC3:1.9 yamt-readahead-base2:1.9 netbsd-3-0-RC2:1.9 yamt-readahead-pervnode:1.9 yamt-readahead-perfile:1.9 yamt-readahead:1.9.0.24 yamt-readahead-base:1.9 netbsd-3-0-RC1:1.9 yamt-vop-base3:1.9 netbsd-2-0-3-RELEASE:1.9 netbsd-2-1:1.9.0.22 yamt-vop-base2:1.9 thorpej-vnode-attr:1.9.0.20 thorpej-vnode-attr-base:1.9 netbsd-2-1-RELEASE:1.9 yamt-vop:1.9.0.18 yamt-vop-base:1.9 netbsd-2-1-RC6:1.9 netbsd-2-1-RC5:1.9 netbsd-2-1-RC4:1.9 netbsd-2-1-RC3:1.9 netbsd-2-1-RC2:1.9 netbsd-2-1-RC1:1.9 yamt-lazymbuf:1.9.0.16 yamt-km-base4:1.9 netbsd-2-0-2-RELEASE:1.9 yamt-km-base3:1.9 netbsd-3:1.9.0.14 netbsd-3-base:1.9 yamt-km-base2:1.9 yamt-km:1.9.0.10 yamt-km-base:1.9 kent-audio2:1.9.0.8 kent-audio2-base:1.9 netbsd-2-0-1-RELEASE:1.9 kent-audio1-beforemerge:1.9 netbsd-2:1.9.0.6 netbsd-2-base:1.9 kent-audio1:1.9.0.4 kent-audio1-base:1.9 netbsd-2-0-RELEASE:1.9 netbsd-2-0-RC5:1.9 netbsd-2-0-RC4:1.9 netbsd-2-0-RC3:1.9 netbsd-2-0-RC2:1.9 netbsd-2-0-RC1:1.9 netbsd-2-0:1.9.0.2 netbsd-2-0-base:1.9 netbsd-1-6-PATCH002-RELEASE:1.8.18.1 netbsd-1-6-PATCH002:1.8.18.1 netbsd-1-6-PATCH002-RC4:1.8.18.1 netbsd-1-6-PATCH002-RC3:1.8.18.1 netbsd-1-6-PATCH002-RC2:1.8.18.1 netbsd-1-6-PATCH002-RC1:1.8.18.1 ktrace-lwp:1.8.0.24 ktrace-lwp-base:1.9 netbsd-1-6-PATCH001:1.8 netbsd-1-6-PATCH001-RELEASE:1.8 netbsd-1-6-PATCH001-RC3:1.8 netbsd-1-6-PATCH001-RC2:1.8 netbsd-1-6-PATCH001-RC1:1.8 nathanw_sa_end:1.8 nathanw_sa_before_merge:1.8 fvdl_fs64_base:1.8 gmcgarry_ctxsw:1.8.0.22 gmcgarry_ctxsw_base:1.8 gmcgarry_ucred:1.8.0.20 gmcgarry_ucred_base:1.8 nathanw_sa_base:1.8 kqueue-aftermerge:1.8 kqueue-beforemerge:1.8 netbsd-1-6-RELEASE:1.8 netbsd-1-6-RC3:1.8 netbsd-1-6-RC2:1.8 netbsd-1-6-RC1:1.8 netbsd-1-6:1.8.0.18 netbsd-1-6-base:1.8 gehenna-devsw:1.8.0.16 gehenna-devsw-base:1.8 netbsd-1-5-PATCH003:1.7 eeh-devprop:1.8.0.14 eeh-devprop-base:1.8 newlock:1.8.0.12 newlock-base:1.8 ifpoll-base:1.8 thorpej-mips-cache:1.8.0.8 thorpej-mips-cache-base:1.8 thorpej-devvp-base3:1.8 thorpej-devvp-base2:1.8 post-chs-ubcperf:1.8 pre-chs-ubcperf:1.8 thorpej-devvp:1.8.0.6 thorpej-devvp-base:1.8 netbsd-1-5-PATCH002:1.7 kqueue:1.8.0.4 kqueue-base:1.8 netbsd-1-5-PATCH001:1.7 thorpej_scsipi_beforemerge:1.8 nathanw_sa:1.8.0.2 thorpej_scsipi_nbase:1.8 netbsd-1-5-RELEASE:1.7 netbsd-1-5-BETA2:1.7 netbsd-1-5-BETA:1.7 netbsd-1-5-ALPHA2:1.7 netbsd-1-5:1.7.0.4 netbsd-1-5-base:1.7 minoura-xpg4dl-base:1.7 minoura-xpg4dl:1.7.0.2 chs-ubc2-newbase:1.6 wrstuden-devbsize-19991221:1.6 wrstuden-devbsize:1.3.0.8 wrstuden-devbsize-base:1.6 kame_141_19991130:1.1.2.2 comdex-fall-1999:1.3.0.6 comdex-fall-1999-base:1.3 fvdl-softdep:1.3.0.4 fvdl-softdep-base:1.3 thorpej_scsipi:1.3.0.2 thorpej_scsipi_base:1.8 kame_14_19990705:1.1.2.1 chs-ubc2-base:1.3 chs-ubc2:1.2.0.2 kame_14_19990628:1.1.2.1 kame:1.1.0.2; locks; strict; comment @ * @; 1.20 date 2022.08.07.20.14.00; author tsutsui; state Exp; branches; next 1.19; commitid k2iHfHUb0mlmcZOD; 1.19 date 2018.05.20.06.29.43; author maxv; state Exp; branches; next 1.18; commitid qy2ztYmRDtD790DA; 1.18 date 2018.02.06.06.32.25; author maxv; state Exp; branches 1.18.2.1; next 1.17; commitid FxuyxcBvTUhltLpA; 1.17 date 2009.03.18.17.06.52; author cegger; state Exp; branches; next 1.16; 1.16 date 2009.03.18.16.00.23; author cegger; state Exp; branches; next 1.15; 1.15 date 2008.08.06.15.01.23; author plunky; state Exp; branches 1.15.2.1 1.15.8.1; next 1.14; 1.14 date 2008.06.24.10.35.15; author gmcgarry; state Exp; branches 1.14.2.1; next 1.13; 1.13 date 2007.11.01.20.33.57; author dyoung; state Exp; branches 1.13.16.1 1.13.20.1 1.13.22.1 1.13.24.1; next 1.12; 1.12 date 2007.04.25.01.12.46; author dyoung; state Exp; branches 1.12.6.1 1.12.8.1 1.12.12.1; next 1.11; 1.11 date 2007.03.04.06.03.26; author christos; state Exp; branches 1.11.2.1 1.11.4.1; next 1.10; 1.10 date 2005.12.11.12.25.02; author christos; state Exp; branches 1.10.26.1; next 1.9; 1.9 date 2003.07.08.10.20.45; author itojun; state Exp; branches 1.9.16.1; next 1.8; 1.8 date 2001.02.10.02.10.14; author itojun; state Exp; branches 1.8.18.1 1.8.24.1; next 1.7; 1.7 date 2000.05.19.10.39.44; author itojun; state Exp; branches 1.7.4.1; next 1.6; 1.6 date 99.12.13.15.17.23; author itojun; state Exp; branches; next 1.5; 1.5 date 99.12.02.05.25.47; author itojun; state Exp; branches; next 1.4; 1.4 date 99.11.19.10.41.43; author bouyer; state Exp; branches; next 1.3; 1.3 date 99.07.03.21.30.19; author thorpej; state Exp; branches 1.3.2.1 1.3.8.1; next 1.2; 1.2 date 99.07.01.08.12.56; author itojun; state Exp; branches 1.2.2.1; next 1.1; 1.1 date 99.06.28.06.37.05; author itojun; state dead; branches 1.1.2.1; next ; 1.18.2.1 date 2018.05.21.04.36.16; author pgoyette; state Exp; branches; next ; commitid X5L8kSrBWQcDt7DA; 1.15.2.1 date 2009.04.28.07.37.23; author skrll; state Exp; branches; next ; 1.15.8.1 date 2009.05.13.17.22.29; author jym; state Exp; branches; next ; 1.14.2.1 date 2008.10.19.22.17.52; author haad; state Exp; branches; next ; 1.13.16.1 date 2008.06.29.09.33.19; author mjf; state Exp; branches; next 1.13.16.2; 1.13.16.2 date 2008.09.28.10.40.59; author mjf; state Exp; branches; next ; 1.13.20.1 date 2009.05.04.08.14.19; author yamt; state Exp; branches; next ; 1.13.22.1 date 2008.09.18.04.37.01; author wrstuden; state Exp; branches; next ; 1.13.24.1 date 2008.06.27.15.11.48; author simonb; state Exp; branches; next ; 1.12.6.1 date 2007.11.04.21.03.42; author jmcneill; state Exp; branches; next ; 1.12.8.1 date 2007.11.06.23.34.04; author matt; state Exp; branches; next ; 1.12.12.1 date 2007.11.13.16.02.57; author bouyer; state Exp; branches; next ; 1.11.2.1 date 2007.06.08.14.17.55; author ad; state Exp; branches; next ; 1.11.4.1 date 2007.07.11.20.11.44; author mjf; state Exp; branches; next ; 1.10.26.1 date 2007.03.12.05.59.58; author rmind; state Exp; branches; next 1.10.26.2; 1.10.26.2 date 2007.05.07.10.56.04; author yamt; state Exp; branches; next ; 1.9.16.1 date 2007.09.03.14.43.33; author yamt; state Exp; branches; next 1.9.16.2; 1.9.16.2 date 2007.11.15.11.45.12; author yamt; state Exp; branches; next ; 1.8.18.1 date 2003.09.01.07.39.43; author tron; state Exp; branches; next ; 1.8.24.1 date 2004.08.03.10.55.13; author skrll; state Exp; branches; next 1.8.24.2; 1.8.24.2 date 2004.09.18.14.55.15; author skrll; state Exp; branches; next 1.8.24.3; 1.8.24.3 date 2004.09.21.13.37.35; author skrll; state Exp; branches; next ; 1.7.4.1 date 2003.08.05.12.52.10; author msaitoh; state Exp; branches; next ; 1.3.2.1 date 2000.11.20.18.10.53; author bouyer; state Exp; branches; next 1.3.2.2; 1.3.2.2 date 2001.02.11.19.17.25; author bouyer; state Exp; branches; next ; 1.3.8.1 date 99.12.27.18.36.25; author wrstuden; state Exp; branches; next ; 1.2.2.1 date 99.07.01.08.12.56; author thorpej; state dead; branches; next 1.2.2.2; 1.2.2.2 date 99.07.01.23.48.28; author thorpej; state Exp; branches; next 1.2.2.3; 1.2.2.3 date 99.08.02.22.36.05; author thorpej; state Exp; branches; next ; 1.1.2.1 date 99.06.28.06.37.05; author itojun; state Exp; branches; next 1.1.2.2; 1.1.2.2 date 99.11.30.13.35.54; author itojun; state Exp; branches; next ; desc @@ 1.20 log @Remove extra whitespaces added by an ancient stupid script. @ text @/* $NetBSD: ip6_mroute.h,v 1.19 2018/05/20 06:29:43 maxv Exp $ */ /* $KAME: ip6_mroute.h,v 1.17 2001/02/10 02:05:52 itojun Exp $ */ /* * Copyright (C) 1998 WIDE Project. * 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT 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 THE PROJECT 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. */ /* BSDI ip_mroute.h,v 2.5 1996/10/11 16:01:48 pjd Exp */ /* * Definitions for IP multicast forwarding. * * Written by David Waitzman, BBN Labs, August 1988. * Modified by Steve Deering, Stanford, February 1989. * Modified by Ajit Thyagarajan, PARC, August 1993. * Modified by Ajit Thyagarajan, PARC, August 1994. * Modified by Ahmed Helmy, USC, September 1996. * * MROUTING Revision: 1.2 */ #ifndef _NETINET6_IP6_MROUTE_H_ #define _NETINET6_IP6_MROUTE_H_ /* * Multicast Routing set/getsockopt commands. */ #ifdef _KERNEL #define MRT6_OINIT 100 /* initialize forwarder (omrt6msg) */ #endif #define MRT6_DONE 101 /* shut down forwarder */ #define MRT6_ADD_MIF 102 /* add multicast interface */ #define MRT6_DEL_MIF 103 /* delete multicast interface */ #define MRT6_ADD_MFC 104 /* insert forwarding cache entry */ #define MRT6_DEL_MFC 105 /* delete forwarding cache entry */ #define MRT6_PIM 107 /* enable pim code */ #define MRT6_INIT 108 /* initialize forwarder (mrt6msg) */ #if BSD >= 199103 #define GET_TIME(t) microtime(&t) #elif defined(sun) #define GET_TIME(t) uniqtime(&t) #else #define GET_TIME(t) ((t) = time) #endif /* * Types and macros for handling bitmaps with one bit per multicast interface. */ typedef u_short mifi_t; /* type of a mif index */ #define MAXMIFS 64 #ifndef IF_SETSIZE #define IF_SETSIZE 256 #endif typedef u_int32_t if_mask; #define NIFBITS (sizeof(if_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x) + ((y) - 1)) / (y)) #endif typedef struct if_set { if_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; } if_set; #define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) #define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) #define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) #define IF_COPY(f, t) memcpy(t, f, sizeof(*(f))) #define IF_ZERO(p) memset(p, 0, sizeof(*(p))) /* * Argument structure for MRT6_ADD_IF. */ struct mif6ctl { mifi_t mif6c_mifi; /* the index of the mif to be added */ u_char mif6c_flags; /* MIFF_ flags defined below */ u_short mif6c_pifi; /* the index of the physical IF */ }; #define MIFF_REGISTER 0x1 /* mif represents a register end-point */ /* * Argument structure for MRT6_ADD_MFC and MRT6_DEL_MFC */ struct mf6cctl { struct sockaddr_in6 mf6cc_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6cc_mcastgrp; /* multicast group associated */ mifi_t mf6cc_parent; /* incoming ifindex */ struct if_set mf6cc_ifset; /* set of forwarding ifs */ }; /* * The kernel's multicast routing statistics. */ struct mrt6stat { u_quad_t mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_quad_t mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_quad_t mrt6s_upcalls; /* # calls to mrouted */ u_quad_t mrt6s_no_route; /* no route for packet's origin */ u_quad_t mrt6s_bad_tunnel; /* malformed tunnel options */ u_quad_t mrt6s_cant_tunnel; /* no room for tunnel options */ u_quad_t mrt6s_wrong_if; /* arrived on wrong interface */ u_quad_t mrt6s_upq_ovflw; /* upcall Q overflow */ u_quad_t mrt6s_cache_cleanups; /* # entries with no upcalls */ u_quad_t mrt6s_drop_sel; /* pkts dropped selectively */ u_quad_t mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_quad_t mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_quad_t mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #ifdef MRT6_OINIT /* * Struct used to communicate from kernel to multicast router * note the convenient similarity to an IPv6 header. * XXX old version, superseded by mrt6msg. */ struct omrt6msg { u_long unused1; u_char im6_msgtype; /* what type of message */ #if 0 #define MRT6MSG_NOCACHE 1 #define MRT6MSG_WRONGMIF 2 #define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/ #endif u_char im6_mbz; /* must be zero */ u_char im6_mif; /* mif rec'd on */ u_char unused2; struct in6_addr im6_src, im6_dst; }; #endif /* * Structure used to communicate from kernel to multicast router. * We'll overlay the structure onto an MLD header (not an IPv6 header * like igmpmsg{} used for IPv4 implementation). This is because this * structure will be passed via an IPv6 raw socket, on which an application * will only receive the payload i.e. the data after the IPv6 header and all * the extension headers. (see Section 3 of draft-ietf-ipngwg-2292bis-01) */ struct mrt6msg { #define MRT6MSG_NOCACHE 1 #define MRT6MSG_WRONGMIF 2 #define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/ u_char im6_mbz; /* must be zero */ u_char im6_msgtype; /* what type of message */ u_int16_t im6_mif; /* mif rec'd on */ u_int32_t im6_pad; /* padding for 64bit arch */ struct in6_addr im6_src, im6_dst; }; /* * Argument structure used by multicast routing daemon to get src-grp * packet counts */ struct sioc_sg_req6 { struct sockaddr_in6 src; struct sockaddr_in6 grp; u_quad_t pktcnt; u_quad_t bytecnt; u_quad_t wrong_if; }; /* * Argument structure used by mrouted to get mif pkt counts */ struct sioc_mif_req6 { mifi_t mifi; /* mif number */ u_quad_t icount; /* Input packet count on mif */ u_quad_t ocount; /* Output packet count on mif */ u_quad_t ibytes; /* Input byte count on mif */ u_quad_t obytes; /* Output byte count on mif */ }; #ifdef _KERNEL /* * The kernel's multicast-interface structure. */ struct mif6 { u_char m6_flags; /* MIFF_ flags defined above */ u_int m6_rate_limit; /* max rate */ struct in6_addr m6_lcl_addr; /* local interface address */ struct ifnet *m6_ifp; /* pointer to interface */ u_quad_t m6_pkt_in; /* # pkts in on interface */ u_quad_t m6_pkt_out; /* # pkts out on interface */ u_quad_t m6_bytes_in; /* # bytes in on interface */ u_quad_t m6_bytes_out; /* # bytes out on interface */ }; /* * The kernel's multicast forwarding cache entry structure */ struct mf6c { struct sockaddr_in6 mf6c_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6c_mcastgrp; /* multicast group associated*/ mifi_t mf6c_parent; /* incoming IF */ struct if_set mf6c_ifset; /* set of outgoing IFs */ u_quad_t mf6c_pkt_cnt; /* pkt count for src-grp */ u_quad_t mf6c_byte_cnt; /* byte count for src-grp */ u_quad_t mf6c_wrong_if; /* wrong if for src-grp */ int mf6c_expire; /* time to clean entry up */ struct timeval mf6c_last_assert; /* last time I sent an assert*/ struct rtdetq *mf6c_stall; /* pkts waiting for route */ struct mf6c *mf6c_next; /* hash table linkage */ }; #define MF6C_INCOMPLETE_PARENT ((mifi_t)-1) /* * Argument structure used for pkt info. while upcall is made */ #ifndef _NETINET_IP_MROUTE_H_ struct rtdetq { /* XXX: rtdetq is also defined in ip_mroute.h */ struct mbuf *m; /* A copy of the packet */ struct ifnet *ifp; /* Interface pkt came in on */ #ifdef UPCALL_TIMING struct timeval t; /* Timestamp */ #endif /* UPCALL_TIMING */ struct rtdetq *next; }; #endif /* _NETINET_IP_MROUTE_H_ */ #define MF6CTBLSIZ 256 #if (MF6CTBLSIZ & (MF6CTBLSIZ - 1)) == 0 /* from sys:route.h */ #define MF6CHASHMOD(h) ((h) & (MF6CTBLSIZ - 1)) #else #define MF6CHASHMOD(h) ((h) % MF6CTBLSIZ) #endif #define MAX_UPQ6 4 /* max. no of pkts in upcall Q */ int ip6_mrouter_set(struct socket *, struct sockopt *); int ip6_mrouter_get(struct socket *, struct sockopt *); int ip6_mrouter_done(void); void ip6_mrouter_detach(struct ifnet *); int mrt6_ioctl(u_long, void *); #endif /* _KERNEL */ #endif /* !_NETINET6_IP6_MROUTE_H_ */ @ 1.19 log @Remove notyet, we've never had this. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.18 2018/02/06 06:32:25 maxv Exp $ */ d96 1 a96 1 #define IF_COPY(f, t) memcpy( t, f, sizeof(*(f))) @ 1.18 log @Remove dead code. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.17 2009/03/18 17:06:52 cegger Exp $ */ a105 3 #ifdef notyet u_int mif6c_rate_limit; /* max rate */ #endif @ 1.18.2.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.19 2018/05/20 06:29:43 maxv Exp $ */ d106 3 @ 1.17 log @bcopy -> memcpy @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.16 2009/03/18 16:00:23 cegger Exp $ */ a211 3 #ifdef notyet struct tbf *m6_tbf; /* token bucket structure at intf. */ #endif a217 4 #ifdef notyet u_int m6_rsvp_on; /* RSVP listening on this vif */ struct socket *m6_rsvpd; /* RSVP daemon socket */ #endif @ 1.16 log @bzero -> memset @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.15 2008/08/06 15:01:23 plunky Exp $ */ d96 1 a96 1 #define IF_COPY(f, t) bcopy(f, t, sizeof(*(f))) @ 1.15 log @Convert socket options code to use a sockopt structure instead of laying everything into an mbuf. approved by core @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.14 2008/06/24 10:35:15 gmcgarry Exp $ */ d97 1 a97 1 #define IF_ZERO(p) bzero(p, sizeof(*(p))) @ 1.15.8.1 log @Sync with HEAD. Commit is split, to avoid a "too many arguments" protocol error. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.17 2009/03/18 17:06:52 cegger Exp $ */ d96 2 a97 2 #define IF_COPY(f, t) memcpy( t, f, sizeof(*(f))) #define IF_ZERO(p) memset(p, 0, sizeof(*(p))) @ 1.15.2.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.17 2009/03/18 17:06:52 cegger Exp $ */ d96 2 a97 2 #define IF_COPY(f, t) memcpy( t, f, sizeof(*(f))) #define IF_ZERO(p) memset(p, 0, sizeof(*(p))) @ 1.14 log @ioctl commands are unsigned long. ABI change to mrt6_ioctl() will affect 64-bit platforms. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.13 2007/11/01 20:33:57 dyoung Exp $ */ d270 2 a271 2 int ip6_mrouter_set(int, struct socket *, struct mbuf *); int ip6_mrouter_get(int, struct socket *, struct mbuf **); @ 1.14.2.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.15 2008/08/06 15:01:23 plunky Exp $ */ d270 2 a271 2 int ip6_mrouter_set(struct socket *, struct sockopt *); int ip6_mrouter_get(struct socket *, struct sockopt *); @ 1.13 log @De-__P(). @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.12 2007/04/25 01:12:46 dyoung Exp $ */ d274 1 a274 1 int mrt6_ioctl(int, void *); @ 1.13.20.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.13 2007/11/01 20:33:57 dyoung Exp $ */ d96 2 a97 2 #define IF_COPY(f, t) memcpy( t, f, sizeof(*(f))) #define IF_ZERO(p) memset(p, 0, sizeof(*(p))) d270 2 a271 2 int ip6_mrouter_set(struct socket *, struct sockopt *); int ip6_mrouter_get(struct socket *, struct sockopt *); d274 1 a274 1 int mrt6_ioctl(u_long, void *); @ 1.13.22.1 log @Sync with wrstuden-revivesa-base-2. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.13 2007/11/01 20:33:57 dyoung Exp $ */ d270 2 a271 2 int ip6_mrouter_set(struct socket *, struct sockopt *); int ip6_mrouter_get(struct socket *, struct sockopt *); d274 1 a274 1 int mrt6_ioctl(u_long, void *); @ 1.13.16.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD$ */ d274 1 a274 1 int mrt6_ioctl(u_long, void *); @ 1.13.16.2 log @Sync with HEAD. @ text @d270 2 a271 2 int ip6_mrouter_set(struct socket *, struct sockopt *); int ip6_mrouter_get(struct socket *, struct sockopt *); @ 1.13.24.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.14 2008/06/24 10:35:15 gmcgarry Exp $ */ d274 1 a274 1 int mrt6_ioctl(u_long, void *); @ 1.12 log @Remove unused member 'm6_route' from struct mif6. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.11 2007/03/04 06:03:26 christos Exp $ */ d270 5 a274 5 int ip6_mrouter_set __P((int, struct socket *, struct mbuf *)); int ip6_mrouter_get __P((int, struct socket *, struct mbuf **)); int ip6_mrouter_done __P((void)); void ip6_mrouter_detach __P((struct ifnet *)); int mrt6_ioctl __P((int, void *)); @ 1.12.12.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ d270 5 a274 5 int ip6_mrouter_set(int, struct socket *, struct mbuf *); int ip6_mrouter_get(int, struct socket *, struct mbuf **); int ip6_mrouter_done(void); void ip6_mrouter_detach(struct ifnet *); int mrt6_ioctl(int, void *); @ 1.12.8.1 log @sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.13 2007/11/01 20:33:57 dyoung Exp $ */ d270 5 a274 5 int ip6_mrouter_set(int, struct socket *, struct mbuf *); int ip6_mrouter_get(int, struct socket *, struct mbuf **); int ip6_mrouter_done(void); void ip6_mrouter_detach(struct ifnet *); int mrt6_ioctl(int, void *); @ 1.12.6.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.13 2007/11/01 20:33:57 dyoung Exp $ */ d270 5 a274 5 int ip6_mrouter_set(int, struct socket *, struct mbuf *); int ip6_mrouter_get(int, struct socket *, struct mbuf **); int ip6_mrouter_done(void); void ip6_mrouter_detach(struct ifnet *); int mrt6_ioctl(int, void *); @ 1.11 log @Kill caddr_t; there will be some MI fallout, but it will be fixed shortly. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.10 2005/12/11 12:25:02 christos Exp $ */ a220 1 struct route_in6 m6_route;/* cached route if this is a tunnel */ @ 1.11.4.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.12 2007/04/25 01:12:46 dyoung Exp $ */ d221 1 @ 1.11.2.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.11 2007/03/04 06:03:26 christos Exp $ */ d221 1 @ 1.10 log @merge ktrace-lwp. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.8.24.3 2004/09/21 13:37:35 skrll Exp $ */ d275 1 a275 1 int mrt6_ioctl __P((int, caddr_t)); @ 1.10.26.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.10 2005/12/11 12:25:02 christos Exp $ */ d275 1 a275 1 int mrt6_ioctl __P((int, void *)); @ 1.10.26.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.10.26.1 2007/03/12 05:59:58 rmind Exp $ */ d221 1 @ 1.9 log @on interface detach, clear multicast forwarding table. from kame @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.8 2001/02/10 02:10:14 itojun Exp $ */ @ 1.9.16.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.9 2003/07/08 10:20:45 itojun Exp $ */ d221 1 d275 1 a275 1 int mrt6_ioctl __P((int, void *)); @ 1.9.16.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.9.16.1 2007/09/03 14:43:33 yamt Exp $ */ d270 5 a274 5 int ip6_mrouter_set(int, struct socket *, struct mbuf *); int ip6_mrouter_get(int, struct socket *, struct mbuf **); int ip6_mrouter_done(void); void ip6_mrouter_detach(struct ifnet *); int mrt6_ioctl(int, void *); @ 1.8 log @fix if_set for architectures with sizeof(long) != 4. IF_xxx behaved badly. (no fear of overrun, since index was mistakenly computed to too small value) @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.7 2000/05/19 10:39:44 itojun Exp $ */ d274 1 @ 1.8.24.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.9 2003/07/08 10:20:45 itojun Exp $ */ a273 1 void ip6_mrouter_detach __P((struct ifnet *)); @ 1.8.24.2 log @Sync with HEAD. @ text @@ 1.8.24.3 log @Fix the sync with head I botched. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.8.24.1 2004/08/03 10:55:13 skrll Exp $ */ @ 1.8.18.1 log @Pull up revision 1.9 (requested by itojun in ticket #1375): on interface detach, clear multicast forwarding table. from kame @ text @d1 1 a1 1 /* $NetBSD$ */ a273 1 void ip6_mrouter_detach __P((struct ifnet *)); @ 1.7 log @correct MLD API. (binary backward compatibility is kept) commit to usr.sbin/pim6* will follow. @ text @d1 2 a2 2 /* $NetBSD: ip6_mroute.h,v 1.6 1999/12/13 15:17:23 itojun Exp $ */ /* $KAME: ip6_mroute.h,v 1.9 2000/04/12 07:28:20 jinmei Exp $ */ d82 1 a82 1 typedef long if_mask; d90 1 a90 1 fd_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; @ 1.7.4.1 log @Pull up revision 1.9 (requested by itojun in ticket #57): on interface detach, clear multicast forwarding table. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.7 2000/05/19 10:39:44 itojun Exp $ */ a273 1 void ip6_mrouter_detach __P((struct ifnet *)); @ 1.6 log @sync IPv6 part with latest KAME tree. IPsec part is left unmodified due to massive changes in KAME side. - IPv6 output goes through nd6_output - faith can capture IPv4 packets as well - you can run IPv4-to-IPv6 translator using heavily modified DNS servers - per-interface statistics (required for IPv6 MIB) - interface autoconfig is revisited - udp input handling has a big change for mapped address support. - introduce in4_cksum() for non-overwriting checksumming - introduce m_pulldown() - neighbor discovery cleanups/improvements - netinet/in.h strictly conforms to RFC2553 (no extra defs visible to userland) - IFA_STATS is fixed a bit (not tested) - and more more more. TODO: - cleanup os-independency #ifdef - avoid rcvif dual use (for IPsec) to help ifdetach (sorry for jumbo commit, I can't separate this any more...) @ text @d1 2 a2 1 /* $NetBSD: ip6_mroute.h,v 1.5 1999/12/02 05:25:47 itojun Exp $ */ d7 1 a7 1 * d19 1 a19 1 * d53 3 a55 1 #define MRT6_INIT 100 /* initialize forwarder */ d62 1 d64 1 a64 1 #if BSD >= 199103 d142 1 d146 1 d148 1 a148 1 struct mrt6msg { d151 2 a152 1 #define MRT6MSG_NOCACHE 1 d155 1 d161 20 d214 1 a214 1 #endif d225 1 a225 1 #endif d229 1 a229 1 * The kernel's multicast forwarding cache entry structure @ 1.5 log @use _KERNEL instead of KERNEL. (sync from KAME) @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.4 1999/11/19 10:41:43 bouyer Exp $ */ a121 1 #if defined(__bsdi__) || defined(__NetBSD__) a136 17 #else struct mrt6stat { u_long mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_long mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_long mrt6s_upcalls; /* # calls to mrouted */ u_long mrt6s_no_route; /* no route for packet's origin */ u_long mrt6s_bad_tunnel; /* malformed tunnel options */ u_long mrt6s_cant_tunnel; /* no room for tunnel options */ u_long mrt6s_wrong_if; /* arrived on wrong interface */ u_long mrt6s_upq_ovflw; /* upcall Q overflow */ u_long mrt6s_cache_cleanups; /* # entries with no upcalls */ u_long mrt6s_drop_sel; /* pkts dropped selectively */ u_long mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_long mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_long mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #endif a154 11 * Argument structure used by mrouted to get src-grp pkt counts */ struct sioc6_sg_req { struct in6_addr src; struct in6_addr grp; u_long pktcnt; u_long bytecnt; u_long wrong_if; }; /* d161 3 a163 3 u_long pktcnt; u_long bytecnt; u_long wrong_if; d171 4 a174 4 u_long icount; /* Input packet count on mif */ u_long ocount; /* Output packet count on mif */ u_long ibytes; /* Input byte count on mif */ u_long obytes; /* Output byte count on mif */ d189 4 a192 4 u_long m6_pkt_in; /* # pkts in on interface */ u_long m6_pkt_out; /* # pkts out on interface */ u_long m6_bytes_in; /* # bytes in on interface */ u_long m6_bytes_out; /* # bytes out on interface */ d209 3 a211 3 u_long mf6c_pkt_cnt; /* pkt count for src-grp */ u_long mf6c_byte_cnt; /* byte count for src-grp */ u_long mf6c_wrong_if; /* wrong if for src-grp */ @ 1.4 log @Update protocoles and interfaces stats counters to 64bit. RTM_IFINFO is now 0xf, 0xe is RTM_OIFINFO which returns the old (if_msghdr14) struct with 32bit counters (binary compat, conditioned on COMPAT_14). Same for sysctl: node 3 is renamed NET_RT_OIFLIST, NET_RT_IFLIST is now node 4. Change rt_msg1() to add an mbuf to the mbuf chain instead of just panic() when the message is larger than MHLEN. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.3 1999/07/03 21:30:19 thorpej Exp $ */ a48 6 #ifdef __NetBSD__ # ifdef _KERNEL # define KERNEL # endif #endif d206 1 a206 1 #ifdef KERNEL d276 1 a276 1 #endif /* KERNEL */ @ 1.3 log @RCS ID police. @ text @d1 1 a1 1 /* $NetBSD$ */ d128 1 a128 1 #ifdef __bsdi__ @ 1.3.2.1 log @Update thorpej_scsipi to -current as of a month ago @ text @d1 1 a1 2 /* $NetBSD: ip6_mroute.h,v 1.7 2000/05/19 10:39:44 itojun Exp $ */ /* $KAME: ip6_mroute.h,v 1.9 2000/04/12 07:28:20 jinmei Exp $ */ d6 1 a6 1 * d18 1 a18 1 * d49 6 d58 1 a58 3 #ifdef _KERNEL #define MRT6_OINIT 100 /* initialize forwarder (omrt6msg) */ #endif a64 1 #define MRT6_INIT 108 /* initialize forwarder (mrt6msg) */ d66 1 a66 1 #if BSD >= 199103 d128 1 d144 17 a161 1 #ifdef MRT6_OINIT a164 1 * XXX old version, superseded by mrt6msg. d166 1 a166 1 struct omrt6msg { d169 1 a169 2 #if 0 #define MRT6MSG_NOCACHE 1 a171 1 #endif a176 1 #endif d179 1 a179 6 * Structure used to communicate from kernel to multicast router. * We'll overlay the structure onto an MLD header (not an IPv6 header * like igmpmsg{} used for IPv4 implementation). This is because this * structure will be passed via an IPv6 raw socket, on which an application * will only receive the payload i.e. the data after the IPv6 header and all * the extension headers. (see Section 3 of draft-ietf-ipngwg-2292bis-01) d181 6 a186 9 struct mrt6msg { #define MRT6MSG_NOCACHE 1 #define MRT6MSG_WRONGMIF 2 #define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/ u_char im6_mbz; /* must be zero */ u_char im6_msgtype; /* what type of message */ u_int16_t im6_mif; /* mif rec'd on */ u_int32_t im6_pad; /* padding for 64bit arch */ struct in6_addr im6_src, im6_dst; d196 3 a198 3 u_quad_t pktcnt; u_quad_t bytecnt; u_quad_t wrong_if; d206 4 a209 4 u_quad_t icount; /* Input packet count on mif */ u_quad_t ocount; /* Output packet count on mif */ u_quad_t ibytes; /* Input byte count on mif */ u_quad_t obytes; /* Output byte count on mif */ d212 1 a212 1 #ifdef _KERNEL d221 1 a221 1 #endif d224 4 a227 4 u_quad_t m6_pkt_in; /* # pkts in on interface */ u_quad_t m6_pkt_out; /* # pkts out on interface */ u_quad_t m6_bytes_in; /* # bytes in on interface */ u_quad_t m6_bytes_out; /* # bytes out on interface */ d232 1 a232 1 #endif d236 1 a236 1 * The kernel's multicast forwarding cache entry structure d244 3 a246 3 u_quad_t mf6c_pkt_cnt; /* pkt count for src-grp */ u_quad_t mf6c_byte_cnt; /* byte count for src-grp */ u_quad_t mf6c_wrong_if; /* wrong if for src-grp */ d282 1 a282 1 #endif /* _KERNEL */ @ 1.3.2.2 log @Sync with HEAD. @ text @d1 2 a2 2 /* $NetBSD: ip6_mroute.h,v 1.8 2001/02/10 02:10:14 itojun Exp $ */ /* $KAME: ip6_mroute.h,v 1.17 2001/02/10 02:05:52 itojun Exp $ */ d82 1 a82 1 typedef u_int32_t if_mask; d90 1 a90 1 if_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; @ 1.3.8.1 log @Pull up to last week's -current. @ text @d1 1 a1 1 /* $NetBSD: ip6_mroute.h,v 1.6 1999/12/13 15:17:23 itojun Exp $ */ d49 6 d128 1 d144 17 d179 11 d196 3 a198 3 u_quad_t pktcnt; u_quad_t bytecnt; u_quad_t wrong_if; d206 4 a209 4 u_quad_t icount; /* Input packet count on mif */ u_quad_t ocount; /* Output packet count on mif */ u_quad_t ibytes; /* Input byte count on mif */ u_quad_t obytes; /* Output byte count on mif */ d212 1 a212 1 #ifdef _KERNEL d224 4 a227 4 u_quad_t m6_pkt_in; /* # pkts in on interface */ u_quad_t m6_pkt_out; /* # pkts out on interface */ u_quad_t m6_bytes_in; /* # bytes in on interface */ u_quad_t m6_bytes_out; /* # bytes out on interface */ d244 3 a246 3 u_quad_t mf6c_pkt_cnt; /* pkt count for src-grp */ u_quad_t mf6c_byte_cnt; /* byte count for src-grp */ u_quad_t mf6c_wrong_if; /* wrong if for src-grp */ d282 1 a282 1 #endif /* _KERNEL */ @ 1.2 log @IPv6 kernel code, based on KAME/NetBSD 1.4, SNAP kit 19990628. (Sorry for a big commit, I can't separate this into several pieces...) Pls check sys/netinet6/TODO and sys/netinet6/IMPLEMENTATION for details. - sys/kern: do not assume single mbuf, accept chained mbuf on passing data from userland to kernel (or other way round). - "midway" ATM card: ATM PVC pseudo device support, like those done in ALTQ package (ftp://ftp.csl.sony.co.jp/pub/kjc/). - sys/netinet/tcp*: IPv4/v6 dual stack tcp support. - sys/netinet/{ip6,icmp6}.h, sys/net/pfkeyv2.h: IETF document assumes those file to be there so we patch it up. - sys/netinet: IPsec additions are here and there. - sys/netinet6/*: most of IPv6 code sits here. - sys/netkey: IPsec key management code - dev/pci/pcidevs: regen In my understanding no code here is subject to export control so it should be safe. @ text @d1 2 @ 1.2.2.1 log @file ip6_mroute.h was added on branch chs-ubc2 on 1999-07-01 23:48:28 +0000 @ text @d1 282 @ 1.2.2.2 log @Sync w/ -current. @ text @a0 282 /* * Copyright (C) 1998 WIDE Project. * 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT 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 THE PROJECT 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. */ /* BSDI ip_mroute.h,v 2.5 1996/10/11 16:01:48 pjd Exp */ /* * Definitions for IP multicast forwarding. * * Written by David Waitzman, BBN Labs, August 1988. * Modified by Steve Deering, Stanford, February 1989. * Modified by Ajit Thyagarajan, PARC, August 1993. * Modified by Ajit Thyagarajan, PARC, August 1994. * Modified by Ahmed Helmy, USC, September 1996. * * MROUTING Revision: 1.2 */ #ifndef _NETINET6_IP6_MROUTE_H_ #define _NETINET6_IP6_MROUTE_H_ #ifdef __NetBSD__ # ifdef _KERNEL # define KERNEL # endif #endif /* * Multicast Routing set/getsockopt commands. */ #define MRT6_INIT 100 /* initialize forwarder */ #define MRT6_DONE 101 /* shut down forwarder */ #define MRT6_ADD_MIF 102 /* add multicast interface */ #define MRT6_DEL_MIF 103 /* delete multicast interface */ #define MRT6_ADD_MFC 104 /* insert forwarding cache entry */ #define MRT6_DEL_MFC 105 /* delete forwarding cache entry */ #define MRT6_PIM 107 /* enable pim code */ #if BSD >= 199103 #define GET_TIME(t) microtime(&t) #elif defined(sun) #define GET_TIME(t) uniqtime(&t) #else #define GET_TIME(t) ((t) = time) #endif /* * Types and macros for handling bitmaps with one bit per multicast interface. */ typedef u_short mifi_t; /* type of a mif index */ #define MAXMIFS 64 #ifndef IF_SETSIZE #define IF_SETSIZE 256 #endif typedef long if_mask; #define NIFBITS (sizeof(if_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x) + ((y) - 1)) / (y)) #endif typedef struct if_set { fd_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; } if_set; #define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) #define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) #define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) #define IF_COPY(f, t) bcopy(f, t, sizeof(*(f))) #define IF_ZERO(p) bzero(p, sizeof(*(p))) /* * Argument structure for MRT6_ADD_IF. */ struct mif6ctl { mifi_t mif6c_mifi; /* the index of the mif to be added */ u_char mif6c_flags; /* MIFF_ flags defined below */ u_short mif6c_pifi; /* the index of the physical IF */ #ifdef notyet u_int mif6c_rate_limit; /* max rate */ #endif }; #define MIFF_REGISTER 0x1 /* mif represents a register end-point */ /* * Argument structure for MRT6_ADD_MFC and MRT6_DEL_MFC */ struct mf6cctl { struct sockaddr_in6 mf6cc_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6cc_mcastgrp; /* multicast group associated */ mifi_t mf6cc_parent; /* incoming ifindex */ struct if_set mf6cc_ifset; /* set of forwarding ifs */ }; /* * The kernel's multicast routing statistics. */ #ifdef __bsdi__ struct mrt6stat { u_quad_t mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_quad_t mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_quad_t mrt6s_upcalls; /* # calls to mrouted */ u_quad_t mrt6s_no_route; /* no route for packet's origin */ u_quad_t mrt6s_bad_tunnel; /* malformed tunnel options */ u_quad_t mrt6s_cant_tunnel; /* no room for tunnel options */ u_quad_t mrt6s_wrong_if; /* arrived on wrong interface */ u_quad_t mrt6s_upq_ovflw; /* upcall Q overflow */ u_quad_t mrt6s_cache_cleanups; /* # entries with no upcalls */ u_quad_t mrt6s_drop_sel; /* pkts dropped selectively */ u_quad_t mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_quad_t mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_quad_t mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #else struct mrt6stat { u_long mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_long mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_long mrt6s_upcalls; /* # calls to mrouted */ u_long mrt6s_no_route; /* no route for packet's origin */ u_long mrt6s_bad_tunnel; /* malformed tunnel options */ u_long mrt6s_cant_tunnel; /* no room for tunnel options */ u_long mrt6s_wrong_if; /* arrived on wrong interface */ u_long mrt6s_upq_ovflw; /* upcall Q overflow */ u_long mrt6s_cache_cleanups; /* # entries with no upcalls */ u_long mrt6s_drop_sel; /* pkts dropped selectively */ u_long mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_long mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_long mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #endif /* * Struct used to communicate from kernel to multicast router * note the convenient similarity to an IPv6 header. */ struct mrt6msg { u_long unused1; u_char im6_msgtype; /* what type of message */ #define MRT6MSG_NOCACHE 1 #define MRT6MSG_WRONGMIF 2 #define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/ u_char im6_mbz; /* must be zero */ u_char im6_mif; /* mif rec'd on */ u_char unused2; struct in6_addr im6_src, im6_dst; }; /* * Argument structure used by mrouted to get src-grp pkt counts */ struct sioc6_sg_req { struct in6_addr src; struct in6_addr grp; u_long pktcnt; u_long bytecnt; u_long wrong_if; }; /* * Argument structure used by multicast routing daemon to get src-grp * packet counts */ struct sioc_sg_req6 { struct sockaddr_in6 src; struct sockaddr_in6 grp; u_long pktcnt; u_long bytecnt; u_long wrong_if; }; /* * Argument structure used by mrouted to get mif pkt counts */ struct sioc_mif_req6 { mifi_t mifi; /* mif number */ u_long icount; /* Input packet count on mif */ u_long ocount; /* Output packet count on mif */ u_long ibytes; /* Input byte count on mif */ u_long obytes; /* Output byte count on mif */ }; #ifdef KERNEL /* * The kernel's multicast-interface structure. */ struct mif6 { u_char m6_flags; /* MIFF_ flags defined above */ u_int m6_rate_limit; /* max rate */ #ifdef notyet struct tbf *m6_tbf; /* token bucket structure at intf. */ #endif struct in6_addr m6_lcl_addr; /* local interface address */ struct ifnet *m6_ifp; /* pointer to interface */ u_long m6_pkt_in; /* # pkts in on interface */ u_long m6_pkt_out; /* # pkts out on interface */ u_long m6_bytes_in; /* # bytes in on interface */ u_long m6_bytes_out; /* # bytes out on interface */ struct route_in6 m6_route;/* cached route if this is a tunnel */ #ifdef notyet u_int m6_rsvp_on; /* RSVP listening on this vif */ struct socket *m6_rsvpd; /* RSVP daemon socket */ #endif }; /* * The kernel's multicast forwarding cache entry structure */ struct mf6c { struct sockaddr_in6 mf6c_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6c_mcastgrp; /* multicast group associated*/ mifi_t mf6c_parent; /* incoming IF */ struct if_set mf6c_ifset; /* set of outgoing IFs */ u_long mf6c_pkt_cnt; /* pkt count for src-grp */ u_long mf6c_byte_cnt; /* byte count for src-grp */ u_long mf6c_wrong_if; /* wrong if for src-grp */ int mf6c_expire; /* time to clean entry up */ struct timeval mf6c_last_assert; /* last time I sent an assert*/ struct rtdetq *mf6c_stall; /* pkts waiting for route */ struct mf6c *mf6c_next; /* hash table linkage */ }; #define MF6C_INCOMPLETE_PARENT ((mifi_t)-1) /* * Argument structure used for pkt info. while upcall is made */ #ifndef _NETINET_IP_MROUTE_H_ struct rtdetq { /* XXX: rtdetq is also defined in ip_mroute.h */ struct mbuf *m; /* A copy of the packet */ struct ifnet *ifp; /* Interface pkt came in on */ #ifdef UPCALL_TIMING struct timeval t; /* Timestamp */ #endif /* UPCALL_TIMING */ struct rtdetq *next; }; #endif /* _NETINET_IP_MROUTE_H_ */ #define MF6CTBLSIZ 256 #if (MF6CTBLSIZ & (MF6CTBLSIZ - 1)) == 0 /* from sys:route.h */ #define MF6CHASHMOD(h) ((h) & (MF6CTBLSIZ - 1)) #else #define MF6CHASHMOD(h) ((h) % MF6CTBLSIZ) #endif #define MAX_UPQ6 4 /* max. no of pkts in upcall Q */ int ip6_mrouter_set __P((int, struct socket *, struct mbuf *)); int ip6_mrouter_get __P((int, struct socket *, struct mbuf **)); int ip6_mrouter_done __P((void)); int mrt6_ioctl __P((int, caddr_t)); #endif /* KERNEL */ #endif /* !_NETINET6_IP6_MROUTE_H_ */ @ 1.2.2.3 log @Update from trunk. @ text @a0 2 /* $NetBSD: ip6_mroute.h,v 1.2.2.2 1999/08/02 22:36:05 thorpej Exp $ */ @ 1.1 log @file ip6_mroute.h was initially added on branch kame. @ text @d1 282 @ 1.1.2.1 log @KAME/NetBSD 1.4 SNAP kit, dated 19990628. NOTE: this branch (kame) is used just for refernce. this may not compile due to multiple reasons. @ text @a0 282 /* * Copyright (C) 1998 WIDE Project. * 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. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT 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 THE PROJECT 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. */ /* BSDI ip_mroute.h,v 2.5 1996/10/11 16:01:48 pjd Exp */ /* * Definitions for IP multicast forwarding. * * Written by David Waitzman, BBN Labs, August 1988. * Modified by Steve Deering, Stanford, February 1989. * Modified by Ajit Thyagarajan, PARC, August 1993. * Modified by Ajit Thyagarajan, PARC, August 1994. * Modified by Ahmed Helmy, USC, September 1996. * * MROUTING Revision: 1.2 */ #ifndef _NETINET6_IP6_MROUTE_H_ #define _NETINET6_IP6_MROUTE_H_ #ifdef __NetBSD__ # ifdef _KERNEL # define KERNEL # endif #endif /* * Multicast Routing set/getsockopt commands. */ #define MRT6_INIT 100 /* initialize forwarder */ #define MRT6_DONE 101 /* shut down forwarder */ #define MRT6_ADD_MIF 102 /* add multicast interface */ #define MRT6_DEL_MIF 103 /* delete multicast interface */ #define MRT6_ADD_MFC 104 /* insert forwarding cache entry */ #define MRT6_DEL_MFC 105 /* delete forwarding cache entry */ #define MRT6_PIM 107 /* enable pim code */ #if BSD >= 199103 #define GET_TIME(t) microtime(&t) #elif defined(sun) #define GET_TIME(t) uniqtime(&t) #else #define GET_TIME(t) ((t) = time) #endif /* * Types and macros for handling bitmaps with one bit per multicast interface. */ typedef u_short mifi_t; /* type of a mif index */ #define MAXMIFS 64 #ifndef IF_SETSIZE #define IF_SETSIZE 256 #endif typedef long if_mask; #define NIFBITS (sizeof(if_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x) + ((y) - 1)) / (y)) #endif typedef struct if_set { fd_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; } if_set; #define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) #define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) #define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) #define IF_COPY(f, t) bcopy(f, t, sizeof(*(f))) #define IF_ZERO(p) bzero(p, sizeof(*(p))) /* * Argument structure for MRT6_ADD_IF. */ struct mif6ctl { mifi_t mif6c_mifi; /* the index of the mif to be added */ u_char mif6c_flags; /* MIFF_ flags defined below */ u_short mif6c_pifi; /* the index of the physical IF */ #ifdef notyet u_int mif6c_rate_limit; /* max rate */ #endif }; #define MIFF_REGISTER 0x1 /* mif represents a register end-point */ /* * Argument structure for MRT6_ADD_MFC and MRT6_DEL_MFC */ struct mf6cctl { struct sockaddr_in6 mf6cc_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6cc_mcastgrp; /* multicast group associated */ mifi_t mf6cc_parent; /* incoming ifindex */ struct if_set mf6cc_ifset; /* set of forwarding ifs */ }; /* * The kernel's multicast routing statistics. */ #ifdef __bsdi__ struct mrt6stat { u_quad_t mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_quad_t mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_quad_t mrt6s_upcalls; /* # calls to mrouted */ u_quad_t mrt6s_no_route; /* no route for packet's origin */ u_quad_t mrt6s_bad_tunnel; /* malformed tunnel options */ u_quad_t mrt6s_cant_tunnel; /* no room for tunnel options */ u_quad_t mrt6s_wrong_if; /* arrived on wrong interface */ u_quad_t mrt6s_upq_ovflw; /* upcall Q overflow */ u_quad_t mrt6s_cache_cleanups; /* # entries with no upcalls */ u_quad_t mrt6s_drop_sel; /* pkts dropped selectively */ u_quad_t mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_quad_t mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_quad_t mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #else struct mrt6stat { u_long mrt6s_mfc_lookups; /* # forw. cache hash table hits */ u_long mrt6s_mfc_misses; /* # forw. cache hash table misses */ u_long mrt6s_upcalls; /* # calls to mrouted */ u_long mrt6s_no_route; /* no route for packet's origin */ u_long mrt6s_bad_tunnel; /* malformed tunnel options */ u_long mrt6s_cant_tunnel; /* no room for tunnel options */ u_long mrt6s_wrong_if; /* arrived on wrong interface */ u_long mrt6s_upq_ovflw; /* upcall Q overflow */ u_long mrt6s_cache_cleanups; /* # entries with no upcalls */ u_long mrt6s_drop_sel; /* pkts dropped selectively */ u_long mrt6s_q_overflow; /* pkts dropped - Q overflow */ u_long mrt6s_pkt2large; /* pkts dropped - size > BKT SIZE */ u_long mrt6s_upq_sockfull; /* upcalls dropped - socket full */ }; #endif /* * Struct used to communicate from kernel to multicast router * note the convenient similarity to an IPv6 header. */ struct mrt6msg { u_long unused1; u_char im6_msgtype; /* what type of message */ #define MRT6MSG_NOCACHE 1 #define MRT6MSG_WRONGMIF 2 #define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/ u_char im6_mbz; /* must be zero */ u_char im6_mif; /* mif rec'd on */ u_char unused2; struct in6_addr im6_src, im6_dst; }; /* * Argument structure used by mrouted to get src-grp pkt counts */ struct sioc6_sg_req { struct in6_addr src; struct in6_addr grp; u_long pktcnt; u_long bytecnt; u_long wrong_if; }; /* * Argument structure used by multicast routing daemon to get src-grp * packet counts */ struct sioc_sg_req6 { struct sockaddr_in6 src; struct sockaddr_in6 grp; u_long pktcnt; u_long bytecnt; u_long wrong_if; }; /* * Argument structure used by mrouted to get mif pkt counts */ struct sioc_mif_req6 { mifi_t mifi; /* mif number */ u_long icount; /* Input packet count on mif */ u_long ocount; /* Output packet count on mif */ u_long ibytes; /* Input byte count on mif */ u_long obytes; /* Output byte count on mif */ }; #ifdef KERNEL /* * The kernel's multicast-interface structure. */ struct mif6 { u_char m6_flags; /* MIFF_ flags defined above */ u_int m6_rate_limit; /* max rate */ #ifdef notyet struct tbf *m6_tbf; /* token bucket structure at intf. */ #endif struct in6_addr m6_lcl_addr; /* local interface address */ struct ifnet *m6_ifp; /* pointer to interface */ u_long m6_pkt_in; /* # pkts in on interface */ u_long m6_pkt_out; /* # pkts out on interface */ u_long m6_bytes_in; /* # bytes in on interface */ u_long m6_bytes_out; /* # bytes out on interface */ struct route_in6 m6_route;/* cached route if this is a tunnel */ #ifdef notyet u_int m6_rsvp_on; /* RSVP listening on this vif */ struct socket *m6_rsvpd; /* RSVP daemon socket */ #endif }; /* * The kernel's multicast forwarding cache entry structure */ struct mf6c { struct sockaddr_in6 mf6c_origin; /* IPv6 origin of mcasts */ struct sockaddr_in6 mf6c_mcastgrp; /* multicast group associated*/ mifi_t mf6c_parent; /* incoming IF */ struct if_set mf6c_ifset; /* set of outgoing IFs */ u_long mf6c_pkt_cnt; /* pkt count for src-grp */ u_long mf6c_byte_cnt; /* byte count for src-grp */ u_long mf6c_wrong_if; /* wrong if for src-grp */ int mf6c_expire; /* time to clean entry up */ struct timeval mf6c_last_assert; /* last time I sent an assert*/ struct rtdetq *mf6c_stall; /* pkts waiting for route */ struct mf6c *mf6c_next; /* hash table linkage */ }; #define MF6C_INCOMPLETE_PARENT ((mifi_t)-1) /* * Argument structure used for pkt info. while upcall is made */ #ifndef _NETINET_IP_MROUTE_H_ struct rtdetq { /* XXX: rtdetq is also defined in ip_mroute.h */ struct mbuf *m; /* A copy of the packet */ struct ifnet *ifp; /* Interface pkt came in on */ #ifdef UPCALL_TIMING struct timeval t; /* Timestamp */ #endif /* UPCALL_TIMING */ struct rtdetq *next; }; #endif /* _NETINET_IP_MROUTE_H_ */ #define MF6CTBLSIZ 256 #if (MF6CTBLSIZ & (MF6CTBLSIZ - 1)) == 0 /* from sys:route.h */ #define MF6CHASHMOD(h) ((h) & (MF6CTBLSIZ - 1)) #else #define MF6CHASHMOD(h) ((h) % MF6CTBLSIZ) #endif #define MAX_UPQ6 4 /* max. no of pkts in upcall Q */ int ip6_mrouter_set __P((int, struct socket *, struct mbuf *)); int ip6_mrouter_get __P((int, struct socket *, struct mbuf **)); int ip6_mrouter_done __P((void)); int mrt6_ioctl __P((int, caddr_t)); #endif /* KERNEL */ #endif /* !_NETINET6_IP6_MROUTE_H_ */ @ 1.1.2.2 log @bring in latest KAME (as of 19991130, KAME/NetBSD141) into kame branch just for reference purposes. This commit includes 1.4 -> 1.4.1 sync for kame branch. The branch does not compile at all (due to the lack of ALTQ and some other source code). Please do not try to modify the branch, this is just for referenre purposes. synchronization to latest KAME will take place on HEAD branch soon. @ text @d47 6 d126 1 d142 17 d180 5 a184 5 struct in6_addr src; struct in6_addr grp; u_quad_t pktcnt; u_quad_t bytecnt; u_quad_t wrong_if; d194 3 a196 3 u_quad_t pktcnt; u_quad_t bytecnt; u_quad_t wrong_if; d204 4 a207 4 u_quad_t icount; /* Input packet count on mif */ u_quad_t ocount; /* Output packet count on mif */ u_quad_t ibytes; /* Input byte count on mif */ u_quad_t obytes; /* Output byte count on mif */ d210 1 a210 1 #if defined(_KERNEL) || defined(KERNEL) d222 4 a225 4 u_quad_t m6_pkt_in; /* # pkts in on interface */ u_quad_t m6_pkt_out; /* # pkts out on interface */ u_quad_t m6_bytes_in; /* # bytes in on interface */ u_quad_t m6_bytes_out; /* # bytes out on interface */ d242 3 a244 3 u_quad_t mf6c_pkt_cnt; /* pkt count for src-grp */ u_quad_t mf6c_byte_cnt; /* byte count for src-grp */ u_quad_t mf6c_wrong_if; /* wrong if for src-grp */ a275 4 #if defined(__FreeBSD__) && __FreeBSD__ >= 3 int ip6_mrouter_set __P((struct socket *so, struct sockopt *sopt)); int ip6_mrouter_get __P((struct socket *so, struct sockopt *sopt)); #else a277 1 #endif d280 1 a280 1 #endif /* _KERNEL */ @