head 1.23; access; symbols netbsd-10-0-RC6:1.23 netbsd-10-0-RC5:1.23 netbsd-10-0-RC4:1.23 netbsd-10-0-RC3:1.23 netbsd-10-0-RC2:1.23 thorpej-ifq:1.23.0.50 thorpej-ifq-base:1.23 thorpej-altq-separation:1.23.0.48 thorpej-altq-separation-base:1.23 netbsd-10-0-RC1:1.23 netbsd-10:1.23.0.46 netbsd-10-base:1.23 bouyer-sunxi-drm:1.23.0.44 bouyer-sunxi-drm-base:1.23 netbsd-9-3-RELEASE:1.23 thorpej-i2c-spi-conf2:1.23.0.42 thorpej-i2c-spi-conf2-base:1.23 thorpej-futex2:1.23.0.40 thorpej-futex2-base:1.23 thorpej-cfargs2:1.23.0.38 thorpej-cfargs2-base:1.23 cjep_sun2x-base1:1.23 cjep_sun2x:1.23.0.36 cjep_sun2x-base:1.23 cjep_staticlib_x-base1:1.23 netbsd-9-2-RELEASE:1.23 cjep_staticlib_x:1.23.0.34 cjep_staticlib_x-base:1.23 thorpej-i2c-spi-conf:1.23.0.32 thorpej-i2c-spi-conf-base:1.23 thorpej-cfargs:1.23.0.30 thorpej-cfargs-base:1.23 thorpej-futex:1.23.0.28 thorpej-futex-base:1.23 netbsd-9-1-RELEASE:1.23 bouyer-xenpvh-base2:1.23 phil-wifi-20200421:1.23 bouyer-xenpvh-base1:1.23 phil-wifi-20200411:1.23 bouyer-xenpvh:1.23.0.26 bouyer-xenpvh-base:1.23 is-mlppp:1.23.0.24 is-mlppp-base:1.23 phil-wifi-20200406:1.23 netbsd-8-2-RELEASE:1.23 ad-namecache-base3:1.23 netbsd-9-0-RELEASE:1.23 netbsd-9-0-RC2:1.23 ad-namecache-base2:1.23 ad-namecache-base1:1.23 ad-namecache:1.23.0.22 ad-namecache-base:1.23 netbsd-9-0-RC1:1.23 phil-wifi-20191119:1.23 netbsd-9:1.23.0.20 netbsd-9-base:1.23 phil-wifi-20190609:1.23 netbsd-8-1-RELEASE:1.23 netbsd-8-1-RC1:1.23 isaki-audio2:1.23.0.18 isaki-audio2-base:1.23 pgoyette-compat-merge-20190127:1.23 pgoyette-compat-20190127:1.23 pgoyette-compat-20190118:1.23 pgoyette-compat-1226:1.23 pgoyette-compat-1126:1.23 pgoyette-compat-1020:1.23 pgoyette-compat-0930:1.23 pgoyette-compat-0906:1.23 netbsd-7-2-RELEASE:1.22 pgoyette-compat-0728:1.23 netbsd-8-0-RELEASE:1.23 phil-wifi:1.23.0.16 phil-wifi-base:1.23 pgoyette-compat-0625:1.23 netbsd-8-0-RC2:1.23 pgoyette-compat-0521:1.23 pgoyette-compat-0502:1.23 pgoyette-compat-0422:1.23 netbsd-8-0-RC1:1.23 pgoyette-compat-0415:1.23 pgoyette-compat-0407:1.23 pgoyette-compat-0330:1.23 pgoyette-compat-0322:1.23 pgoyette-compat-0315:1.23 netbsd-7-1-2-RELEASE:1.22 pgoyette-compat:1.23.0.14 pgoyette-compat-base:1.23 netbsd-7-1-1-RELEASE:1.22 tls-maxphys-base-20171202:1.23 matt-nb8-mediatek:1.23.0.12 matt-nb8-mediatek-base:1.23 nick-nhusb-base-20170825:1.23 perseant-stdc-iso10646:1.23.0.10 perseant-stdc-iso10646-base:1.23 netbsd-8:1.23.0.8 netbsd-8-base:1.23 prg-localcount2-base3:1.23 prg-localcount2-base2:1.23 prg-localcount2-base1:1.23 prg-localcount2:1.23.0.6 prg-localcount2-base:1.23 pgoyette-localcount-20170426:1.23 bouyer-socketcan-base1:1.23 jdolecek-ncq:1.23.0.4 jdolecek-ncq-base:1.23 pgoyette-localcount-20170320:1.23 netbsd-7-1:1.22.0.48 netbsd-7-1-RELEASE:1.22 netbsd-7-1-RC2:1.22 nick-nhusb-base-20170204:1.23 netbsd-7-nhusb-base-20170116:1.22 bouyer-socketcan:1.23.0.2 bouyer-socketcan-base:1.23 pgoyette-localcount-20170107:1.23 netbsd-7-1-RC1:1.22 nick-nhusb-base-20161204:1.23 pgoyette-localcount-20161104:1.22 netbsd-7-0-2-RELEASE:1.22 nick-nhusb-base-20161004:1.22 localcount-20160914:1.22 netbsd-7-nhusb:1.22.0.46 netbsd-7-nhusb-base:1.22 pgoyette-localcount-20160806:1.22 pgoyette-localcount-20160726:1.22 pgoyette-localcount:1.22.0.44 pgoyette-localcount-base:1.22 nick-nhusb-base-20160907:1.22 nick-nhusb-base-20160529:1.22 netbsd-7-0-1-RELEASE:1.22 nick-nhusb-base-20160422:1.22 nick-nhusb-base-20160319:1.22 nick-nhusb-base-20151226:1.22 netbsd-7-0:1.22.0.42 netbsd-7-0-RELEASE:1.22 nick-nhusb-base-20150921:1.22 netbsd-7-0-RC3:1.22 netbsd-7-0-RC2:1.22 netbsd-7-0-RC1:1.22 nick-nhusb-base-20150606:1.22 nick-nhusb-base-20150406:1.22 nick-nhusb:1.22.0.40 nick-nhusb-base:1.22 netbsd-5-2-3-RELEASE:1.20 netbsd-5-1-5-RELEASE:1.20 netbsd-6-0-6-RELEASE:1.22 netbsd-6-1-5-RELEASE:1.22 netbsd-7:1.22.0.38 netbsd-7-base:1.22 yamt-pagecache-base9:1.22 yamt-pagecache-tag8:1.22 netbsd-6-1-4-RELEASE:1.22 netbsd-6-0-5-RELEASE:1.22 tls-earlyentropy:1.22.0.36 tls-earlyentropy-base:1.22 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.22 riastradh-drm2-base3:1.22 netbsd-6-1-3-RELEASE:1.22 netbsd-6-0-4-RELEASE:1.22 netbsd-5-2-2-RELEASE:1.20 netbsd-5-1-4-RELEASE:1.20 netbsd-6-1-2-RELEASE:1.22 netbsd-6-0-3-RELEASE:1.22 netbsd-5-2-1-RELEASE:1.20 netbsd-5-1-3-RELEASE:1.20 rmind-smpnet-nbase:1.22 netbsd-6-1-1-RELEASE:1.22 riastradh-drm2-base2:1.22 riastradh-drm2-base1:1.22 riastradh-drm2:1.22.0.34 riastradh-drm2-base:1.22 rmind-smpnet:1.22.0.26 rmind-smpnet-base:1.22 netbsd-6-1:1.22.0.32 netbsd-6-0-2-RELEASE:1.22 netbsd-6-1-RELEASE:1.22 khorben-n900:1.22.0.30 netbsd-6-1-RC4:1.22 netbsd-6-1-RC3:1.22 agc-symver:1.22.0.28 agc-symver-base:1.22 netbsd-6-1-RC2:1.22 netbsd-6-1-RC1:1.22 yamt-pagecache-base8:1.22 netbsd-5-2:1.20.0.20 netbsd-6-0-1-RELEASE:1.22 yamt-pagecache-base7:1.22 netbsd-5-2-RELEASE:1.20 netbsd-5-2-RC1:1.20 matt-nb6-plus-nbase:1.22 yamt-pagecache-base6:1.22 netbsd-6-0:1.22.0.24 netbsd-6-0-RELEASE:1.22 netbsd-6-0-RC2:1.22 tls-maxphys:1.22.0.22 tls-maxphys-base:1.22 matt-nb6-plus:1.22.0.20 matt-nb6-plus-base:1.22 netbsd-6-0-RC1:1.22 jmcneill-usbmp-base10:1.22 yamt-pagecache-base5:1.22 jmcneill-usbmp-base9:1.22 yamt-pagecache-base4:1.22 jmcneill-usbmp-base8:1.22 jmcneill-usbmp-base7:1.22 jmcneill-usbmp-base6:1.22 jmcneill-usbmp-base5:1.22 jmcneill-usbmp-base4:1.22 jmcneill-usbmp-base3:1.22 jmcneill-usbmp-pre-base2:1.22 jmcneill-usbmp-base2:1.22 netbsd-6:1.22.0.18 netbsd-6-base:1.22 netbsd-5-1-2-RELEASE:1.20 netbsd-5-1-1-RELEASE:1.20 jmcneill-usbmp:1.22.0.16 jmcneill-usbmp-base:1.22 jmcneill-audiomp3:1.22.0.14 jmcneill-audiomp3-base:1.22 yamt-pagecache-base3:1.22 yamt-pagecache-base2:1.22 yamt-pagecache:1.22.0.12 yamt-pagecache-base:1.22 rmind-uvmplock-nbase:1.22 cherry-xenmp:1.22.0.10 cherry-xenmp-base:1.22 bouyer-quota2-nbase:1.22 bouyer-quota2:1.22.0.8 bouyer-quota2-base:1.22 jruoho-x86intr:1.22.0.6 jruoho-x86intr-base:1.22 matt-mips64-premerge-20101231:1.22 matt-nb5-mips64-premerge-20101231:1.20 matt-nb5-pq3:1.20.0.18 matt-nb5-pq3-base:1.20 netbsd-5-1:1.20.0.16 netbsd-5-1-RELEASE:1.20 uebayasi-xip-base4:1.22 uebayasi-xip-base3:1.22 yamt-nfs-mp-base11:1.22 netbsd-5-1-RC4:1.20 matt-nb5-mips64-k15:1.20 uebayasi-xip-base2:1.22 yamt-nfs-mp-base10:1.22 netbsd-5-1-RC3:1.20 netbsd-5-1-RC2:1.20 uebayasi-xip-base1:1.22 netbsd-5-1-RC1:1.20 rmind-uvmplock:1.22.0.4 rmind-uvmplock-base:1.22 yamt-nfs-mp-base9:1.22 uebayasi-xip:1.22.0.2 uebayasi-xip-base:1.22 netbsd-5-0-2-RELEASE:1.20 matt-nb5-mips64-premerge-20091211:1.20 matt-premerge-20091211:1.22 yamt-nfs-mp-base8:1.22 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.20 matt-nb4-mips64-k7-u2a-k9b:1.20 matt-nb5-mips64-u1-k1-k5:1.20 yamt-nfs-mp-base7:1.22 matt-nb5-mips64:1.20.0.14 netbsd-5-0-1-RELEASE:1.20 jymxensuspend-base:1.22 yamt-nfs-mp-base6:1.22 yamt-nfs-mp-base5:1.22 yamt-nfs-mp-base4:1.21 jym-xensuspend-nbase:1.22 yamt-nfs-mp-base3:1.21 nick-hppapmap-base4:1.21 nick-hppapmap-base3:1.21 netbsd-5-0:1.20.0.12 netbsd-5-0-RELEASE:1.20 netbsd-5-0-RC4:1.20 netbsd-5-0-RC3:1.20 nick-hppapmap-base2:1.21 netbsd-5-0-RC2:1.20 jym-xensuspend:1.21.0.2 jym-xensuspend-base:1.21 netbsd-5-0-RC1:1.20 haad-dm-base2:1.20 haad-nbase2:1.20 ad-audiomp2:1.20.0.10 ad-audiomp2-base:1.20 netbsd-5:1.20.0.8 netbsd-5-base:1.20 nick-hppapmap:1.20.0.6 nick-hppapmap-base:1.21 matt-mips64-base2:1.20 matt-mips64:1.19.0.36 haad-dm-base1:1.20 wrstuden-revivesa-base-4:1.20 netbsd-4-0-1-RELEASE:1.17 wrstuden-revivesa-base-3:1.20 wrstuden-revivesa-base-2:1.20 wrstuden-fixsa-newbase:1.17 nick-csl-alignment-base5:1.19 haad-dm:1.20.0.4 haad-dm-base:1.20 wrstuden-revivesa-base-1:1.20 simonb-wapbl-nbase:1.20 yamt-pf42-base4:1.20 simonb-wapbl:1.20.0.2 simonb-wapbl-base:1.20 yamt-pf42-base3:1.20 hpcarm-cleanup-nbase:1.20 yamt-pf42-baseX:1.19 yamt-pf42-base2:1.20 yamt-nfs-mp-base2:1.20 wrstuden-revivesa:1.19.0.34 wrstuden-revivesa-base:1.20 yamt-nfs-mp:1.19.0.32 yamt-nfs-mp-base:1.19 yamt-pf42:1.19.0.30 yamt-pf42-base:1.19 ad-socklock-base1:1.19 yamt-lazymbuf-base15:1.19 yamt-lazymbuf-base14:1.19 keiichi-mipv6-nbase:1.19 mjf-devfs2:1.19.0.28 mjf-devfs2-base:1.20 nick-net80211-sync:1.19.0.26 nick-net80211-sync-base:1.19 keiichi-mipv6:1.19.0.24 keiichi-mipv6-base:1.19 bouyer-xeni386-merge1:1.19 matt-armv6-prevmlocking:1.19 wrstuden-fixsa-base-1:1.17 vmlocking2-base3:1.19 netbsd-4-0:1.17.0.8 netbsd-4-0-RELEASE:1.17 bouyer-xeni386-nbase:1.19 yamt-kmem-base3:1.19 cube-autoconf:1.19.0.22 cube-autoconf-base:1.19 yamt-kmem-base2:1.19 bouyer-xeni386:1.19.0.20 bouyer-xeni386-base:1.19 yamt-kmem:1.19.0.18 yamt-kmem-base:1.19 vmlocking2-base2:1.19 reinoud-bufcleanup-nbase:1.19 vmlocking2:1.19.0.16 vmlocking2-base1:1.19 netbsd-4-0-RC5:1.17 matt-nb4-arm:1.17.0.6 matt-nb4-arm-base:1.17 matt-armv6-nbase:1.19 jmcneill-base:1.19 netbsd-4-0-RC4:1.17 mjf-devfs:1.19.0.14 mjf-devfs-base:1.19 bouyer-xenamd64-base2:1.19 vmlocking-nbase:1.19 yamt-x86pmap-base4:1.19 bouyer-xenamd64:1.19.0.12 bouyer-xenamd64-base:1.19 netbsd-4-0-RC3:1.17 yamt-x86pmap-base3:1.19 yamt-x86pmap-base2:1.19 netbsd-4-0-RC2:1.17 yamt-x86pmap:1.19.0.10 yamt-x86pmap-base:1.19 netbsd-4-0-RC1:1.17 matt-armv6:1.19.0.8 matt-armv6-base:1.19 matt-mips64-base:1.19 jmcneill-pm:1.19.0.6 jmcneill-pm-base:1.19 hpcarm-cleanup:1.19.0.4 hpcarm-cleanup-base:1.19 nick-csl-alignment:1.19.0.2 nick-csl-alignment-base:1.19 netbsd-3-1-1-RELEASE:1.14 netbsd-3-0-3-RELEASE:1.14 yamt-idlelwp-base8:1.18 wrstuden-fixsa:1.17.0.4 wrstuden-fixsa-base:1.17 thorpej-atomic:1.18.0.12 thorpej-atomic-base:1.18 reinoud-bufcleanup:1.18.0.10 reinoud-bufcleanup-base:1.19 mjf-ufs-trans:1.18.0.8 mjf-ufs-trans-base:1.19 vmlocking:1.18.0.6 vmlocking-base:1.19 ad-audiomp:1.18.0.4 ad-audiomp-base:1.18 yamt-idlelwp:1.18.0.2 post-newlock2-merge:1.17 newlock2-nbase:1.17 yamt-splraiseipl-base5:1.17 yamt-splraiseipl-base4:1.17 yamt-splraiseipl-base3:1.17 abandoned-netbsd-4-base:1.16 abandoned-netbsd-4:1.16.0.18 netbsd-3-1:1.14.0.14 netbsd-3-1-RELEASE:1.14 netbsd-3-0-2-RELEASE:1.14 yamt-splraiseipl-base2:1.16 netbsd-3-1-RC4:1.14 yamt-splraiseipl:1.16.0.22 yamt-splraiseipl-base:1.16 netbsd-3-1-RC3:1.14 yamt-pdpolicy-base9:1.16 newlock2:1.16.0.20 newlock2-base:1.17 yamt-pdpolicy-base8:1.16 netbsd-3-1-RC2:1.14 netbsd-3-1-RC1:1.14 yamt-pdpolicy-base7:1.16 netbsd-4:1.17.0.2 netbsd-4-base:1.17 yamt-pdpolicy-base6:1.16 chap-midi-nbase:1.16 netbsd-3-0-1-RELEASE:1.14 gdamore-uart:1.16.0.16 gdamore-uart-base:1.16 simonb-timcounters-final:1.16 yamt-pdpolicy-base5:1.16 chap-midi:1.16.0.14 chap-midi-base:1.16 yamt-pdpolicy-base4:1.16 yamt-pdpolicy-base3:1.16 peter-altq-base:1.16 peter-altq:1.16.0.12 yamt-pdpolicy-base2:1.16 elad-kernelauth-base:1.16 elad-kernelauth:1.16.0.10 yamt-pdpolicy:1.16.0.8 yamt-pdpolicy-base:1.16 yamt-uio_vmspace-base5:1.16 simonb-timecounters:1.16.0.6 simonb-timecounters-base:1.16 rpaulo-netinet-merge-pcb:1.16.0.4 rpaulo-netinet-merge-pcb-base:1.16 yamt-uio_vmspace:1.16.0.2 netbsd-3-0:1.14.0.12 netbsd-3-0-RELEASE:1.14 netbsd-3-0-RC6:1.14 yamt-readahead-base3:1.15 netbsd-3-0-RC5:1.14 netbsd-3-0-RC4:1.14 netbsd-3-0-RC3:1.14 yamt-readahead-base2:1.15 netbsd-3-0-RC2:1.14 yamt-readahead-pervnode:1.15 yamt-readahead-perfile:1.15 yamt-readahead:1.15.0.8 yamt-readahead-base:1.15 netbsd-3-0-RC1:1.14 yamt-vop-base3:1.15 netbsd-2-0-3-RELEASE:1.12 netbsd-2-1:1.12.0.6 yamt-vop-base2:1.15 thorpej-vnode-attr:1.15.0.6 thorpej-vnode-attr-base:1.15 netbsd-2-1-RELEASE:1.12 yamt-vop:1.15.0.4 yamt-vop-base:1.15 netbsd-2-1-RC6:1.12 netbsd-2-1-RC5:1.12 netbsd-2-1-RC4:1.12 netbsd-2-1-RC3:1.12 netbsd-2-1-RC2:1.12 netbsd-2-1-RC1:1.12 yamt-lazymbuf:1.15.0.2 yamt-km-base4:1.14 netbsd-2-0-2-RELEASE:1.12 yamt-km-base3:1.14 netbsd-3:1.14.0.10 netbsd-3-base:1.14 yamt-km-base2:1.14 yamt-km:1.14.0.6 yamt-km-base:1.14 kent-audio2:1.14.0.4 kent-audio2-base:1.14 netbsd-2-0-1-RELEASE:1.12 kent-audio1-beforemerge:1.14 netbsd-2:1.12.0.4 netbsd-2-base:1.12 kent-audio1:1.14.0.2 kent-audio1-base:1.14 netbsd-2-0-RELEASE:1.12 netbsd-2-0-RC5:1.12 netbsd-2-0-RC4:1.12 netbsd-2-0-RC3:1.12 netbsd-2-0-RC2:1.12 netbsd-2-0-RC1:1.12 netbsd-2-0:1.12.0.2 netbsd-2-0-base:1.12 netbsd-1-6-PATCH002-RELEASE:1.11 netbsd-1-6-PATCH002:1.11 netbsd-1-6-PATCH002-RC4:1.11 netbsd-1-6-PATCH002-RC3:1.11 netbsd-1-6-PATCH002-RC2:1.11 netbsd-1-6-PATCH002-RC1:1.11 ktrace-lwp:1.11.0.24 ktrace-lwp-base:1.16 netbsd-1-6-PATCH001:1.11 netbsd-1-6-PATCH001-RELEASE:1.11 netbsd-1-6-PATCH001-RC3:1.11 netbsd-1-6-PATCH001-RC2:1.11 netbsd-1-6-PATCH001-RC1:1.11 nathanw_sa_end:1.11 nathanw_sa_before_merge:1.11 fvdl_fs64_base:1.11 gmcgarry_ctxsw:1.11.0.22 gmcgarry_ctxsw_base:1.11 gmcgarry_ucred:1.11.0.20 gmcgarry_ucred_base:1.11 nathanw_sa_base:1.11 kqueue-aftermerge:1.11 kqueue-beforemerge:1.11 netbsd-1-6-RELEASE:1.11 netbsd-1-6-RC3:1.11 netbsd-1-6-RC2:1.11 netbsd-1-6-RC1:1.11 netbsd-1-6:1.11.0.18 netbsd-1-6-base:1.11 gehenna-devsw:1.11.0.16 gehenna-devsw-base:1.11 netbsd-1-5-PATCH003:1.9.32.1 eeh-devprop:1.11.0.14 eeh-devprop-base:1.11 newlock:1.11.0.12 newlock-base:1.11 ifpoll-base:1.11 thorpej-mips-cache:1.11.0.8 thorpej-mips-cache-base:1.11 thorpej-devvp-base3:1.11 thorpej-devvp-base2:1.11 post-chs-ubcperf:1.11 pre-chs-ubcperf:1.11 thorpej-devvp:1.11.0.6 thorpej-devvp-base:1.11 netbsd-1-5-PATCH002:1.9 kqueue:1.11.0.4 kqueue-base:1.11 netbsd-1-5-PATCH001:1.9 thorpej_scsipi_beforemerge:1.11 nathanw_sa:1.11.0.2 thorpej_scsipi_nbase:1.11 netbsd-1-5-RELEASE:1.9 netbsd-1-5-BETA2:1.9 netbsd-1-5-BETA:1.9 netbsd-1-4-PATCH003:1.9 netbsd-1-5-ALPHA2:1.9 netbsd-1-5:1.9.0.32 netbsd-1-5-base:1.9 minoura-xpg4dl-base:1.9 minoura-xpg4dl:1.9.0.30 netbsd-1-4-PATCH002:1.9 chs-ubc2-newbase:1.9 wrstuden-devbsize-19991221:1.9 wrstuden-devbsize:1.9.0.28 wrstuden-devbsize-base:1.9 kame_141_19991130:1.9.20.3 comdex-fall-1999:1.9.0.26 comdex-fall-1999-base:1.9 fvdl-softdep:1.9.0.24 fvdl-softdep-base:1.9 thorpej_scsipi:1.9.0.22 thorpej_scsipi_base:1.11 netbsd-1-4-PATCH001:1.9 kame_14_19990705:1.9.20.2 kame_14_19990628:1.9.20.1 kame:1.9.0.20 chs-ubc2:1.9.0.18 chs-ubc2-base:1.9 netbsd-1-4-RELEASE:1.9 netbsd-1-4:1.9.0.16 netbsd-1-4-base:1.9 netbsd-1-3-PATCH003:1.9 netbsd-1-3-PATCH003-CANDIDATE2:1.9 kenh-if-detach:1.9.0.14 kenh-if-detach-base:1.9 netbsd-1-3-PATCH003-CANDIDATE1:1.9 netbsd-1-3-PATCH003-CANDIDATE0:1.9 chs-ubc:1.9.0.12 chs-ubc-base:1.9 eeh-paddr_t:1.9.0.10 eeh-paddr_t-base:1.9 netbsd-1-3-PATCH002:1.9 lite-2:1.1.1.3 lite-1:1.1.1.2 CSRG:1.1.1 netbsd-1-3-PATCH001:1.9 netbsd-1-3-RELEASE:1.9 netbsd-1-3-BETA:1.9 netbsd-1-3:1.9.0.8 netbsd-1-3-base:1.9 thorpej-signal:1.9.0.6 thorpej-signal-base:1.9 marc-pcmcia:1.9.0.4 marc-pcmcia-bp:1.9 marc-pcmcia-base:1.9 bouyer-scsipi:1.9.0.2 is-newarp-before-merge:1.8 netbsd-1-2-PATCH001:1.8 mrg-vm-swap:1.8.0.8 is-newarp:1.8.0.6 is-newarp-base:1.8 thorpej-setroot:1.8.0.2 netbsd-1-2-RELEASE:1.8 netbsd-1-2-BETA:1.8 netbsd-1-2:1.8.0.4 netbsd-1-2-base:1.8 date-03-may-96:1.1.1.2 netbsd-1-1-PATCH001:1.7 netbsd-1-1-RELEASE:1.7 netbsd-1-1:1.7.0.2 netbsd-1-1-base:1.7 netbsd-1-0-PATCH06:1.5 netbsd-1-0-PATCH05:1.5 netbsd-1-0-PATCH04:1.5 netbsd-1-0-PATCH03:1.5 netbsd-1-0-PATCH02:1.5 netbsd-1-0-PATCH1:1.5 netbsd-1-0-PATCH0:1.5 netbsd-1-0-RELEASE:1.5 netbsd-1-0:1.5.0.2 netbsd-1-0-base:1.5 magnum-base:1.3 magnum:1.3.0.4 netbsd-0-9-patch-001:1.3 netbsd-0-9-RELEASE:1.3 netbsd-0-9-BETA:1.3 netbsd-0-9-ALPHA2:1.3 netbsd-0-9-ALPHA:1.3 netbsd-0-9:1.3.0.2 netbsd-0-9-base:1.3 netbsd-0-8:1.1.1.1 netbsd-alpha-1:1.1.1.1 patchkit-0-2-2:1.1.1.1 WFJ-386bsd-01:1.1.1.1 WFJ-920714:1.1.1; locks; strict; comment @ * @; 1.23 date 2016.11.15.01.50.06; author ozaki-r; state Exp; branches; next 1.22; 1.22 date 2009.05.27.17.46.50; author pooka; state Exp; branches 1.22.22.1 1.22.40.1 1.22.44.1; next 1.21; 1.21 date 2009.02.05.21.45.36; author dyoung; state Exp; branches 1.21.2.1; next 1.20; 1.20 date 2008.05.11.20.22.38; author dyoung; state Exp; branches 1.20.6.1; next 1.19; 1.19 date 2007.06.09.03.07.21; author dyoung; state Exp; branches 1.19.28.1 1.19.30.1 1.19.32.1 1.19.34.1; next 1.18; 1.18 date 2007.02.17.07.46.38; author dyoung; state Exp; branches 1.18.2.1 1.18.6.1 1.18.8.1; next 1.17; 1.17 date 2006.10.22.20.55.09; author christos; state Exp; branches; next 1.16; 1.16 date 2005.12.10.23.21.39; author elad; state Exp; branches 1.16.20.1 1.16.22.1; next 1.15; 1.15 date 2005.05.29.21.22.53; author christos; state Exp; branches 1.15.2.1; next 1.14; 1.14 date 2004.04.21.21.03.43; author matt; state Exp; branches; next 1.13; 1.13 date 2004.04.21.04.17.28; author matt; state Exp; branches; next 1.12; 1.12 date 2003.08.07.16.32.56; author agc; state Exp; branches; next 1.11; 1.11 date 2000.12.17.10.23.20; author itojun; state Exp; branches 1.11.24.1; next 1.10; 1.10 date 2000.11.06.11.07.37; author itojun; state Exp; branches; next 1.9; 1.9 date 97.04.02.21.17.31; author christos; state Exp; branches 1.9.20.1 1.9.22.1 1.9.32.1; next 1.8; 1.8 date 96.02.13.22.00.37; author christos; state Exp; branches; next 1.7; 1.7 date 95.05.17.15.50.08; author mycroft; state Exp; branches; next 1.6; 1.6 date 95.03.26.20.30.17; author jtc; state Exp; branches; next 1.5; 1.5 date 94.06.29.06.36.36; author cgd; state Exp; branches; next 1.4; 1.4 date 94.05.13.06.03.05; author mycroft; state Exp; branches; next 1.3; 1.3 date 93.05.20.03.06.08; author cgd; state Exp; branches; next 1.2; 1.2 date 93.04.19.03.47.56; author mycroft; state Exp; branches; next 1.1; 1.1 date 93.03.21.09.45.37; author cgd; state Exp; branches 1.1.1.1; next ; 1.22.22.1 date 2017.12.03.11.39.02; author jdolecek; state Exp; branches; next ; commitid XcIYRZTAh1LmerhA; 1.22.40.1 date 2016.12.05.10.55.27; author skrll; state Exp; branches; next ; 1.22.44.1 date 2017.01.07.08.56.50; author pgoyette; state Exp; branches; next ; 1.21.2.1 date 2009.07.23.23.32.47; author jym; state Exp; branches; next ; 1.20.6.1 date 2009.03.03.18.33.38; author skrll; state Exp; branches; next ; 1.19.28.1 date 2008.06.02.13.24.23; author mjf; state Exp; branches; next ; 1.19.30.1 date 2008.05.18.12.35.28; author yamt; state Exp; branches; next ; 1.19.32.1 date 2008.05.16.02.25.41; author yamt; state Exp; branches; next 1.19.32.2; 1.19.32.2 date 2009.05.04.08.14.15; author yamt; state Exp; branches; next 1.19.32.3; 1.19.32.3 date 2009.06.20.07.20.33; author yamt; state Exp; branches; next ; 1.19.34.1 date 2008.06.23.04.31.58; author wrstuden; state Exp; branches; next ; 1.18.2.1 date 2007.02.17.07.46.38; author dyoung; state dead; branches; next 1.18.2.2; 1.18.2.2 date 2007.02.17.07.46.39; author dyoung; state Exp; branches; next ; 1.18.6.1 date 2007.07.15.13.27.55; author ad; state Exp; branches; next ; 1.18.8.1 date 2007.07.11.20.11.01; author mjf; state Exp; branches; next ; 1.16.20.1 date 2006.11.18.21.39.30; author ad; state Exp; branches; next ; 1.16.22.1 date 2006.12.10.07.19.00; author yamt; state Exp; branches; next ; 1.15.2.1 date 2006.06.21.15.10.27; author yamt; state Exp; branches; next 1.15.2.2; 1.15.2.2 date 2006.12.30.20.50.20; author yamt; state Exp; branches; next 1.15.2.3; 1.15.2.3 date 2007.02.26.09.11.37; author yamt; state Exp; branches; next 1.15.2.4; 1.15.2.4 date 2007.09.03.14.42.23; author yamt; state Exp; branches; next ; 1.11.24.1 date 2004.08.03.10.54.19; author skrll; state Exp; branches; next 1.11.24.2; 1.11.24.2 date 2004.09.18.14.54.16; author skrll; state Exp; branches; next 1.11.24.3; 1.11.24.3 date 2004.09.21.13.36.42; author skrll; state Exp; branches; next 1.11.24.4; 1.11.24.4 date 2005.11.10.14.10.33; author skrll; state Exp; branches; next 1.11.24.5; 1.11.24.5 date 2005.12.11.10.29.19; author christos; state Exp; branches; next ; 1.9.20.1 date 99.06.28.06.36.57; author itojun; state Exp; branches; next 1.9.20.2; 1.9.20.2 date 99.07.06.11.02.41; author itojun; state Exp; branches; next 1.9.20.3; 1.9.20.3 date 99.11.30.13.35.14; author itojun; state Exp; branches; next ; 1.9.22.1 date 2000.11.22.16.06.02; author bouyer; state Exp; branches; next 1.9.22.2; 1.9.22.2 date 2001.01.05.17.36.54; author bouyer; state Exp; branches; next ; 1.9.32.1 date 2002.02.20.22.55.45; author he; state Exp; branches; next ; 1.1.1.1 date 93.03.21.09.45.37; author cgd; state Exp; branches; next 1.1.1.2; 1.1.1.2 date 98.03.01.02.10.09; author fvdl; state Exp; branches; next 1.1.1.3; 1.1.1.3 date 98.03.01.02.13.26; author fvdl; state Exp; branches; next ; desc @@ 1.23 log @Don't use rt_walktree to delete routes Some functions use rt_walktree to scan the routing table and delete matched routes. However, we shouldn't use rt_walktree to delete routes because rt_walktree is recursive to the routing table (radix tree) and isn't friendly to MP-ification. rt_walktree allows a caller to pass a callback function to delete an matched entry. The callback function is called from an API of the radix tree (rn_walktree) but also calls an API of the radix tree to delete an entry. This change adds a new API of the radix tree, rn_search_matched, which returns a matched entry that is selected by a callback function passed by a caller and the caller itself deletes the entry. By using the API, we can avoid the recursive form. @ text @/* $NetBSD: radix.h,v 1.22 2009/05/27 17:46:50 pooka Exp $ */ /* * Copyright (c) 1988, 1989, 1993 * The Regents of the University of California. 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 University 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 REGENTS 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 REGENTS 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. * * @@(#)radix.h 8.2 (Berkeley) 10/31/94 */ #ifndef _NET_RADIX_H_ #define _NET_RADIX_H_ /* * Radix search tree node layout. */ struct radix_node { struct radix_mask *rn_mklist; /* list of masks contained in subtree */ struct radix_node *rn_p; /* parent */ short rn_b; /* bit offset; -1-index(netmask) */ char rn_bmask; /* node: mask for bit test*/ u_char rn_flags; /* enumerated next */ #define RNF_NORMAL 1 /* leaf contains normal route */ #define RNF_ROOT 2 /* leaf is root leaf for tree */ #define RNF_ACTIVE 4 /* This node is alive (for rtfree) */ union { struct { /* leaf only data: */ const char *rn_Key; /* object of search */ const char *rn_Mask; /* netmask, if present */ struct radix_node *rn_Dupedkey; } rn_leaf; struct { /* node only data: */ int rn_Off; /* where to start compare */ struct radix_node *rn_L;/* progeny */ struct radix_node *rn_R;/* progeny */ } rn_node; } rn_u; #ifdef RN_DEBUG int rn_info; struct radix_node *rn_twin; struct radix_node *rn_ybro; #endif }; #define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey #define rn_key rn_u.rn_leaf.rn_Key #define rn_mask rn_u.rn_leaf.rn_Mask #define rn_off rn_u.rn_node.rn_Off #define rn_l rn_u.rn_node.rn_L #define rn_r rn_u.rn_node.rn_R /* * Annotations to tree concerning potential routes applying to subtrees. */ struct radix_mask { short rm_b; /* bit offset; -1-index(netmask) */ char rm_unused; /* cf. rn_bmask */ u_char rm_flags; /* cf. rn_flags */ struct radix_mask *rm_mklist; /* more masks to try */ union { const char *rmu_mask; /* the mask */ struct radix_node *rmu_leaf; /* for normal routes */ } rm_rmu; int rm_refs; /* # of references to this struct */ }; #define rm_mask rm_rmu.rmu_mask #define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */ #define MKGet(m) {\ if (rn_mkfreelist) {\ m = rn_mkfreelist; \ rn_mkfreelist = (m)->rm_mklist; \ } else \ R_Malloc(m, struct radix_mask *, sizeof (*(m))); }\ #define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);} struct radix_node_head { struct radix_node *rnh_treetop; int rnh_addrsize; /* permit, but not require fixed keys */ int rnh_pktsize; /* permit, but not require fixed keys */ struct radix_node *(*rnh_addaddr) /* add based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); struct radix_node *(*rnh_addpkt) /* add based on packet hdr */ (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); struct radix_node *(*rnh_deladdr) /* remove based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_delpkt) /* remove based on packet hdr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_matchaddr) /* locate based on sockaddr */ (const void *v, struct radix_node_head *head); struct radix_node *(*rnh_lookup) /* locate based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_matchpkt) /* locate based on packet hdr */ (const void *v, struct radix_node_head *head); struct radix_node rnh_nodes[3]; /* empty tree for common case */ }; #ifdef _KERNEL extern struct radix_mask *rn_mkfreelist; #define R_Malloc(p, t, n) (p = (t) malloc((size_t)(n), M_RTABLE, M_NOWAIT)) #define Free(p) free(p, M_RTABLE); #endif /*_KERNEL*/ void rn_init(void); int rn_inithead(void **, int); void rn_delayedinit(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); struct radix_node * rn_search_matched(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); struct radix_node *rn_addmask(const void *, int, int), *rn_addroute(const void *, const void *, struct radix_node_head *, struct radix_node [2]), *rn_delete1(const void *, const void *, struct radix_node_head *, struct radix_node *), *rn_delete(const void *, const void *, struct radix_node_head *), *rn_insert(const void *, struct radix_node_head *, int *, struct radix_node [2]), *rn_lookup(const void *, const void *, struct radix_node_head *), *rn_match(const void *, struct radix_node_head *), *rn_newpair(const void *, int, struct radix_node[2]), *rn_search(const void *, struct radix_node *), *rn_search_m(const void *, struct radix_node *, const void *); #endif /* !_NET_RADIX_H_ */ @ 1.22 log @Make it possible to register delayed radix tree head inits which will be processed when the radix "subsystem" is initialized -- all users must be attached before any inits to know the max keylength. Use of link sets is no longer required, and only attached domains need to be considered. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.21 2009/02/05 21:45:36 dyoung Exp $ */ d142 4 @ 1.22.22.1 log @update from HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ a141 4 struct radix_node * rn_search_matched(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.22.44.1 log @Sync with HEAD. (Note that most of these changes are simply $NetBSD$ tag issues.) @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.23 2016/11/15 01:50:06 ozaki-r Exp $ */ a141 4 struct radix_node * rn_search_matched(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.22.40.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.23 2016/11/15 01:50:06 ozaki-r Exp $ */ a141 4 struct radix_node * rn_search_matched(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.21 log @Cosmetic: break a line, change some spaces to tabs, remove an extra empty line. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.20 2008/05/11 20:22:38 dyoung Exp $ */ d136 1 @ 1.21.2.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.22 2009/05/27 17:46:50 pooka Exp $ */ a135 1 void rn_delayedinit(void **, int); @ 1.20 log @Bzero, Bcmp, and Bcopy are not used any more, so delete them. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19 2007/06/09 03:07:21 dyoung Exp $ */ a126 1 d134 7 a140 6 void rn_init(void); int rn_inithead(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.20.6.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.21 2009/02/05 21:45:36 dyoung Exp $ */ d127 1 d135 6 a140 7 void rn_init(void); int rn_inithead(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.19 log @Get rid of radix_node_head.rnh_walktree, because it is only ever set to rn_walktree. Introduce rt_walktree(), which applies a subroutine to every route in a particular address family. Use it instead of rn_walktree() virtually everywhere. This helps to hide the routing table implementation. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.18 2007/02/17 07:46:38 dyoung Exp $ */ a130 3 #define Bcmp(a, b, n) ((n) == 0 ? 0 : memcmp((a), (b), (n))) #define Bcopy(a, b, n) memmove((b), (a), (n)) #define Bzero(p, n) memset((p), 0, (n)); @ 1.19.34.1 log @Sync w/ -current. 34 merge conflicts to follow. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19 2007/06/09 03:07:21 dyoung Exp $ */ d131 3 @ 1.19.28.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD$ */ d131 3 @ 1.19.30.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19 2007/06/09 03:07:21 dyoung Exp $ */ d131 3 @ 1.19.32.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19 2007/06/09 03:07:21 dyoung Exp $ */ d131 3 @ 1.19.32.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19.32.1 2008/05/16 02:25:41 yamt Exp $ */ d127 1 d135 6 a140 7 void rn_init(void); int rn_inithead(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.19.32.3 log @sync with head @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19.32.2 2009/05/04 08:14:15 yamt Exp $ */ a135 1 void rn_delayedinit(void **, int); @ 1.18 log @Clean this code up some. Extract subroutine rn_delete1() to ease RADIX_MPATH integration, should we ever do that. Remove RN_DEBUG code that does not compile. Join some lines of the type type var1; type var2; type var3; making type var1, var2, var3. Break lines of the type if (expr) stmt1; else stmt2; so that normal people can read them. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.17 2006/10/22 20:55:09 christos Exp $ */ a123 3 int (*rnh_walktree) /* traverse tree */ (struct radix_node_head *, int (*)(struct radix_node *, void *), void *); @ 1.18.2.1 log @file radix.h was added on branch yamt-idlelwp on 2007-02-17 07:46:39 +0000 @ text @d1 162 @ 1.18.2.2 log @Clean this code up some. Extract subroutine rn_delete1() to ease RADIX_MPATH integration, should we ever do that. Remove RN_DEBUG code that does not compile. Join some lines of the type type var1; type var2; type var3; making type var1, var2, var3. Break lines of the type if (expr) stmt1; else stmt2; so that normal people can read them. @ text @a0 162 /* $NetBSD: radix.h,v 1.18 2007/02/17 07:46:38 dyoung Exp $ */ /* * Copyright (c) 1988, 1989, 1993 * The Regents of the University of California. 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 University 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 REGENTS 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 REGENTS 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. * * @@(#)radix.h 8.2 (Berkeley) 10/31/94 */ #ifndef _NET_RADIX_H_ #define _NET_RADIX_H_ /* * Radix search tree node layout. */ struct radix_node { struct radix_mask *rn_mklist; /* list of masks contained in subtree */ struct radix_node *rn_p; /* parent */ short rn_b; /* bit offset; -1-index(netmask) */ char rn_bmask; /* node: mask for bit test*/ u_char rn_flags; /* enumerated next */ #define RNF_NORMAL 1 /* leaf contains normal route */ #define RNF_ROOT 2 /* leaf is root leaf for tree */ #define RNF_ACTIVE 4 /* This node is alive (for rtfree) */ union { struct { /* leaf only data: */ const char *rn_Key; /* object of search */ const char *rn_Mask; /* netmask, if present */ struct radix_node *rn_Dupedkey; } rn_leaf; struct { /* node only data: */ int rn_Off; /* where to start compare */ struct radix_node *rn_L;/* progeny */ struct radix_node *rn_R;/* progeny */ } rn_node; } rn_u; #ifdef RN_DEBUG int rn_info; struct radix_node *rn_twin; struct radix_node *rn_ybro; #endif }; #define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey #define rn_key rn_u.rn_leaf.rn_Key #define rn_mask rn_u.rn_leaf.rn_Mask #define rn_off rn_u.rn_node.rn_Off #define rn_l rn_u.rn_node.rn_L #define rn_r rn_u.rn_node.rn_R /* * Annotations to tree concerning potential routes applying to subtrees. */ struct radix_mask { short rm_b; /* bit offset; -1-index(netmask) */ char rm_unused; /* cf. rn_bmask */ u_char rm_flags; /* cf. rn_flags */ struct radix_mask *rm_mklist; /* more masks to try */ union { const char *rmu_mask; /* the mask */ struct radix_node *rmu_leaf; /* for normal routes */ } rm_rmu; int rm_refs; /* # of references to this struct */ }; #define rm_mask rm_rmu.rmu_mask #define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */ #define MKGet(m) {\ if (rn_mkfreelist) {\ m = rn_mkfreelist; \ rn_mkfreelist = (m)->rm_mklist; \ } else \ R_Malloc(m, struct radix_mask *, sizeof (*(m))); }\ #define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);} struct radix_node_head { struct radix_node *rnh_treetop; int rnh_addrsize; /* permit, but not require fixed keys */ int rnh_pktsize; /* permit, but not require fixed keys */ struct radix_node *(*rnh_addaddr) /* add based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); struct radix_node *(*rnh_addpkt) /* add based on packet hdr */ (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); struct radix_node *(*rnh_deladdr) /* remove based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_delpkt) /* remove based on packet hdr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_matchaddr) /* locate based on sockaddr */ (const void *v, struct radix_node_head *head); struct radix_node *(*rnh_lookup) /* locate based on sockaddr */ (const void *v, const void *mask, struct radix_node_head *head); struct radix_node *(*rnh_matchpkt) /* locate based on packet hdr */ (const void *v, struct radix_node_head *head); int (*rnh_walktree) /* traverse tree */ (struct radix_node_head *, int (*)(struct radix_node *, void *), void *); struct radix_node rnh_nodes[3]; /* empty tree for common case */ }; #ifdef _KERNEL extern struct radix_mask *rn_mkfreelist; #define Bcmp(a, b, n) ((n) == 0 ? 0 : memcmp((a), (b), (n))) #define Bcopy(a, b, n) memmove((b), (a), (n)) #define Bzero(p, n) memset((p), 0, (n)); #define R_Malloc(p, t, n) (p = (t) malloc((size_t)(n), M_RTABLE, M_NOWAIT)) #define Free(p) free(p, M_RTABLE); #endif /*_KERNEL*/ void rn_init(void); int rn_inithead(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); struct radix_node *rn_addmask(const void *, int, int), *rn_addroute(const void *, const void *, struct radix_node_head *, struct radix_node [2]), *rn_delete1(const void *, const void *, struct radix_node_head *, struct radix_node *), *rn_delete(const void *, const void *, struct radix_node_head *), *rn_insert(const void *, struct radix_node_head *, int *, struct radix_node [2]), *rn_lookup(const void *, const void *, struct radix_node_head *), *rn_match(const void *, struct radix_node_head *), *rn_newpair(const void *, int, struct radix_node[2]), *rn_search(const void *, struct radix_node *), *rn_search_m(const void *, struct radix_node *, const void *); #endif /* !_NET_RADIX_H_ */ @ 1.18.6.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.18 2007/02/17 07:46:38 dyoung Exp $ */ d124 3 @ 1.18.8.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.19 2007/06/09 03:07:21 dyoung Exp $ */ d124 3 @ 1.17 log @don't leak kernel variable declarations to userland. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.16 2005/12/10 23:21:39 elad Exp $ */ d151 2 @ 1.16 log @Multiple inclusion protection, as suggested by christos@@ on tech-kern@@ few days ago. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.15 2005/05/29 21:22:53 christos Exp $ */ d80 1 a80 1 extern struct radix_mask { d90 1 a90 1 } *rn_mkfreelist; d132 2 @ 1.16.22.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.16 2005/12/10 23:21:39 elad Exp $ */ d80 1 a80 1 struct radix_mask { d90 1 a90 1 }; a131 2 extern struct radix_mask *rn_mkfreelist; @ 1.16.20.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.17 2006/10/22 20:55:09 christos Exp $ */ d80 1 a80 1 struct radix_mask { d90 1 a90 1 }; a131 2 extern struct radix_mask *rn_mkfreelist; @ 1.15 log @- sprinkle const - remove unneeded casts - use more mem*() instead of b*() funcs. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.14 2004/04/21 21:03:43 matt Exp $ */ d158 1 a158 1 #endif /* _NET_RADIX_H_ */ @ 1.15.2.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.15 2005/05/29 21:22:53 christos Exp $ */ d158 1 a158 1 #endif /* !_NET_RADIX_H_ */ @ 1.15.2.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.15.2.1 2006/06/21 15:10:27 yamt Exp $ */ d80 1 a80 1 struct radix_mask { d90 1 a90 1 }; a131 2 extern struct radix_mask *rn_mkfreelist; @ 1.15.2.3 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.15.2.2 2006/12/30 20:50:20 yamt Exp $ */ a150 2 *rn_delete1(const void *, const void *, struct radix_node_head *, struct radix_node *), @ 1.15.2.4 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.15.2.3 2007/02/26 09:11:37 yamt Exp $ */ d124 3 @ 1.14 log @ANSI-fy and some additional de-__P and constification. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.13 2004/04/21 04:17:28 matt Exp $ */ d132 3 a134 3 #define Bcmp(a, b, n) bcmp(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n)) #define Bcopy(a, b, n) bcopy(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n)) #define Bzero(p, n) bzero((caddr_t)(p), (unsigned)(n)); d136 1 a136 1 #define Free(p) free((caddr_t)p, M_RTABLE); @ 1.13 log @Constify if.c radix.c and route.c (and fix related fallout). @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.12 2003/08/07 16:32:56 agc Exp $ */ d109 2 a110 2 __P((const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[])); d112 2 a113 2 __P((const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[])); d115 1 a115 1 __P((const void *v, const void *mask, struct radix_node_head *head)); d117 1 a117 1 __P((const void *v, const void *mask, struct radix_node_head *head)); d119 1 a119 1 __P((const void *v, struct radix_node_head *head)); d121 1 a121 1 __P((const void *v, const void *mask, struct radix_node_head *head)); d123 1 a123 1 __P((const void *v, struct radix_node_head *head)); d125 2 a126 2 __P((struct radix_node_head *, int (*)(struct radix_node *, void *), void *)); d139 6 a144 6 void rn_init __P((void)); int rn_inithead __P((void **, int)); int rn_inithead0 __P((struct radix_node_head *, int)); int rn_refines __P((const void *, const void *)); int rn_walktree __P((struct radix_node_head *, int (*)(struct radix_node *, void *), void *)); d146 11 a156 11 *rn_addmask __P((const void *, int, int)), *rn_addroute __P((const void *, const void *, struct radix_node_head *, struct radix_node [2])), *rn_delete __P((const void *, const void *, struct radix_node_head *)), *rn_insert __P((const void *, struct radix_node_head *, int *, struct radix_node [2])), *rn_lookup __P((const void *, const void *, struct radix_node_head *)), *rn_match __P((const void *, struct radix_node_head *)), *rn_newpair __P((const void *, int, struct radix_node[2])), *rn_search __P((const void *, struct radix_node *)), *rn_search_m __P((const void *, struct radix_node *, const void *)); @ 1.12 log @Move UCB-licensed code from 4-clause to 3-clause licence. Patches provided by Joel Baker in PR 22364, verified by myself. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.11 2000/12/17 10:23:20 itojun Exp $ */ d52 2 a53 2 caddr_t rn_Key; /* object of search */ caddr_t rn_Mask; /* netmask, if present */ d86 1 a86 1 caddr_t rmu_mask; /* the mask */ d109 1 a109 1 __P((void *v, void *mask, d112 1 a112 1 __P((void *v, void *mask, d115 1 a115 1 __P((void *v, void *mask, struct radix_node_head *head)); d117 1 a117 1 __P((void *v, void *mask, struct radix_node_head *head)); d119 1 a119 1 __P((void *v, struct radix_node_head *head)); d121 1 a121 1 __P((void *v, void *mask, struct radix_node_head *head)); d123 1 a123 1 __P((void *v, struct radix_node_head *head)); d135 1 a135 1 #define R_Malloc(p, t, n) (p = (t) malloc((unsigned long)(n), M_RTABLE, M_DONTWAIT)) d142 1 a142 1 int rn_refines __P((void *, void *)); d146 2 a147 2 *rn_addmask __P((void *, int, int)), *rn_addroute __P((void *, void *, struct radix_node_head *, d149 2 a150 2 *rn_delete __P((void *, void *, struct radix_node_head *)), *rn_insert __P((void *, struct radix_node_head *, int *, d152 5 a156 5 *rn_lookup __P((void *, void *, struct radix_node_head *)), *rn_match __P((void *, struct radix_node_head *)), *rn_newpair __P((void *, int, struct radix_node[2])), *rn_search __P((void *, struct radix_node *)), *rn_search_m __P((void *, struct radix_node *, void *)); @ 1.11 log @fix typo in function name (rn_satsifies_leaf -> satisfies). indent. split rn_inithead() into two function - i'm putting some hook around here. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.10 2000/11/06 11:07:37 itojun Exp $ */ d15 1 a15 5 * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors @ 1.11.24.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.14 2004/04/21 21:03:43 matt Exp $ */ d15 5 a19 1 * 3. Neither the name of the University nor the names of its contributors d56 2 a57 2 const char *rn_Key; /* object of search */ const char *rn_Mask; /* netmask, if present */ d90 1 a90 1 const char *rmu_mask; /* the mask */ d113 2 a114 2 (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); d116 2 a117 2 (const void *v, const void *mask, struct radix_node_head *head, struct radix_node nodes[]); d119 1 a119 1 (const void *v, const void *mask, struct radix_node_head *head); d121 1 a121 1 (const void *v, const void *mask, struct radix_node_head *head); d123 1 a123 1 (const void *v, struct radix_node_head *head); d125 1 a125 1 (const void *v, const void *mask, struct radix_node_head *head); d127 1 a127 1 (const void *v, struct radix_node_head *head); d129 2 a130 2 (struct radix_node_head *, int (*)(struct radix_node *, void *), void *); d139 1 a139 1 #define R_Malloc(p, t, n) (p = (t) malloc((size_t)(n), M_RTABLE, M_NOWAIT)) d143 6 a148 6 void rn_init(void); int rn_inithead(void **, int); int rn_inithead0(struct radix_node_head *, int); int rn_refines(const void *, const void *); int rn_walktree(struct radix_node_head *, int (*)(struct radix_node *, void *), void *); d150 11 a160 11 *rn_addmask(const void *, int, int), *rn_addroute(const void *, const void *, struct radix_node_head *, struct radix_node [2]), *rn_delete(const void *, const void *, struct radix_node_head *), *rn_insert(const void *, struct radix_node_head *, int *, struct radix_node [2]), *rn_lookup(const void *, const void *, struct radix_node_head *), *rn_match(const void *, struct radix_node_head *), *rn_newpair(const void *, int, struct radix_node[2]), *rn_search(const void *, struct radix_node *), *rn_search_m(const void *, struct radix_node *, const void *); @ 1.11.24.2 log @Sync with HEAD. @ text @@ 1.11.24.3 log @Fix the sync with head I botched. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.11.24.1 2004/08/03 10:54:19 skrll Exp $ */ @ 1.11.24.4 log @Sync with HEAD. Here we go again... @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.11.24.3 2004/09/21 13:36:42 skrll Exp $ */ d132 3 a134 3 #define Bcmp(a, b, n) ((n) == 0 ? 0 : memcmp((a), (b), (n))) #define Bcopy(a, b, n) memmove((b), (a), (n)) #define Bzero(p, n) memset((p), 0, (n)); d136 1 a136 1 #define Free(p) free(p, M_RTABLE); @ 1.11.24.5 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.16 2005/12/10 23:21:39 elad Exp $ */ d158 1 a158 1 #endif /* !_NET_RADIX_H_ */ @ 1.10 log @avoid namespace pollution by radix.h. the #ifndef _KERNEL portion was to use radix.c in userland compilation, however, noone is using it. (routed has its own radix.c) @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.9 1997/04/02 21:17:31 christos Exp $ */ d145 1 @ 1.9 log @Sync with Lite2. @ text @d1 1 a1 1 /* $NetBSD$ */ d135 1 a135 7 #ifndef _KERNEL #define Bcmp(a, b, n) bcmp(((char *)(a)), ((char *)(b)), (n)) #define Bcopy(a, b, n) bcopy(((char *)(a)), ((char *)(b)), (unsigned)(n)) #define Bzero(p, n) bzero((char *)(p), (int)(n)); #define R_Malloc(p, t, n) (p = (t) malloc((unsigned int)(n))) #define Free(p) free((char *)p); #else @ 1.9.32.1 log @Pull up revision 1.10 (requested by he): Avoid namespace pollution, only define certain macros under _KERNEL. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.9 1997/04/02 21:17:31 christos Exp $ */ d135 7 a141 1 #ifdef _KERNEL @ 1.9.22.1 log @Sync with HEAD. @ text @d135 7 a141 1 #ifdef _KERNEL @ 1.9.22.2 log @Sync with HEAD @ text @a144 1 int rn_inithead0 __P((struct radix_node_head *, int)); @ 1.9.20.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 @d1 1 a1 30 /* $NetBSD: radix.h,v 1.9 1997/04/02 21:17:31 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 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. */ @ 1.9.20.2 log @KAME/NetBSD 1.4, SNAP kit 1999/07/05. NOTE: this branch is just for reference purposes (i.e. for taking cvs diff). do not touch anything on the branch. actual work must be done on HEAD branch. @ text @d1 30 a30 1 /* $NetBSD: radix.h,v 1.9.20.1 1999/06/28 06:36:57 itojun Exp $ */ @ 1.9.20.3 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 @d1 1 a1 1 /* $NetBSD: radix.h,v 1.9 1997/04/02 21:17:31 christos Exp $ */ @ 1.8 log @Net prototypes @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.7 1995/05/17 15:50:08 mycroft Exp $ */ d65 1 a65 1 } rn_u; d147 1 a165 1 #endif /* !_KERNEL */ d167 1 a167 1 #endif /* !_NET_RADIX_H_ */ @ 1.7 log @Newer version from CSRG. @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.6 1995/03/26 20:30:17 jtc Exp $ */ d129 2 a130 1 __P((struct radix_node_head *head, int (*f)(), void *w)); d151 2 a152 1 int rn_walktree __P((struct radix_node_head *, int (*)(), void *)); @ 1.6 log @KERNEL -> _KERNEL @ text @d1 1 a1 1 /* $NetBSD: radix.h,v 1.5 1994/06/29 06:36:36 cgd Exp $ */ d35 1 a35 1 * @@(#)radix.h 8.1 (Berkeley) 6/10/93 d39 1 a39 1 #define _NET_RADIX_H_ d65 1 a65 1 } rn_u; d89 4 a92 1 caddr_t rm_mask; /* the mask */ d96 3 d124 2 d136 1 d158 1 d163 1 a163 1 #endif /* _KERNEL */ @ 1.5 log @New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD' @ text @d1 1 a1 1 /* $NetBSD$ */ d126 1 a126 1 #ifndef KERNEL d153 1 a153 1 #endif /* KERNEL */ @ 1.4 log @Update to 4.4-Lite networking code, with a few local changes. @ text @d1 2 d35 1 a35 2 * from: @@(#)radix.h 8.1 (Berkeley) 6/10/93 * $Id: radix.h,v 1.3 1993/05/20 03:06:08 cgd Exp $ @ 1.3 log @add rcs ids to everything, and clean up headers @ text @d2 2 a3 2 * Copyright (c) 1988, 1989 Regents of the University of California. * All rights reserved. d33 2 a34 2 * from: @@(#)radix.h 7.4 (Berkeley) 6/28/90 * $Id$ d55 1 a55 1 caddr_t rn_Key; /* object of search */ d63 1 a63 1 }rn_node; a71 2 #define MAXKEYLEN 32 d101 1 a101 2 extern struct radix_node_head { struct radix_node_head *rnh_next; d103 20 a122 3 int rnh_af; struct radix_node rnh_nodes[3]; } *radix_node_head; d136 17 a152 1 #endif /*KERNEL*/ @ 1.2 log @Add consistent multiple-inclusion protection. @ text @d33 2 a34 1 * @@(#)radix.h 7.4 (Berkeley) 6/28/90 @ 1.1 log @Initial revision @ text @d36 3 d122 2 @ 1.1.1.1 log @initial import of 386bsd-0.1 sources @ text @@ 1.1.1.2 log @Import 4.4BSD-Lite for reference @ text @d2 2 a3 2 * Copyright (c) 1988, 1989, 1993 * The Regents of the University of California. All rights reserved. d33 1 a33 1 * @@(#)radix.h 8.1 (Berkeley) 6/10/93 a35 3 #ifndef _RADIX_H_ #define _RADIX_H_ d68 2 d99 2 a100 1 struct radix_node_head { d102 3 a104 20 int rnh_addrsize; /* permit, but not require fixed keys */ int rnh_pktsize; /* permit, but not require fixed keys */ struct radix_node *(*rnh_addaddr) /* add based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head, struct radix_node nodes[])); struct radix_node *(*rnh_addpkt) /* add based on packet hdr */ __P((void *v, void *mask, struct radix_node_head *head, struct radix_node nodes[])); struct radix_node *(*rnh_deladdr) /* remove based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head)); struct radix_node *(*rnh_delpkt) /* remove based on packet hdr */ __P((void *v, void *mask, struct radix_node_head *head)); struct radix_node *(*rnh_matchaddr) /* locate based on sockaddr */ __P((void *v, struct radix_node_head *head)); struct radix_node *(*rnh_matchpkt) /* locate based on packet hdr */ __P((void *v, struct radix_node_head *head)); int (*rnh_walktree) /* traverse tree */ __P((struct radix_node_head *head, int (*f)(), void *w)); struct radix_node rnh_nodes[3]; /* empty tree for common case */ }; a117 17 void rn_init __P((void)); int rn_inithead __P((void **, int)); int rn_refines __P((void *, void *)); int rn_walktree __P((struct radix_node_head *, int (*)(), void *)); struct radix_node *rn_addmask __P((void *, int, int)), *rn_addroute __P((void *, void *, struct radix_node_head *, struct radix_node [2])), *rn_delete __P((void *, void *, struct radix_node_head *)), *rn_insert __P((void *, struct radix_node_head *, int *, struct radix_node [2])), *rn_match __P((void *, struct radix_node_head *)), *rn_newpair __P((void *, int, struct radix_node[2])), *rn_search __P((void *, struct radix_node *)), *rn_search_m __P((void *, struct radix_node *, void *)); a118 1 #endif /* _RADIX_H_ */ @ 1.1.1.3 log @Import 4.4BSD-Lite2 @ text @d33 1 a33 1 * @@(#)radix.h 8.2 (Berkeley) 10/31/94 d87 1 a87 4 union { caddr_t rmu_mask; /* the mask */ struct radix_node *rmu_leaf; /* for normal routes */ } rm_rmu; a90 3 #define rm_mask rm_rmu.rmu_mask #define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */ a115 2 struct radix_node *(*rnh_lookup) /* locate based on sockaddr */ __P((void *v, void *mask, struct radix_node_head *head)); a125 1 #define Bcopy(a, b, n) bcopy(((char *)(a)), ((char *)(b)), (unsigned)(n)) a134 1 #endif /*KERNEL*/ d152 1 @