From owner-FreeBSD-tech-jp@jp.freebsd.org  Tue Mar  4 16:58:27 1997
Received: by jaz.jp.freebsd.org (8.8.5+2.7Wbeta5/8.7.3) id QAA23320
	Tue, 4 Mar 1997 16:58:27 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.8.5+2.7Wbeta5/8.7.3) with SMTP id QAA23315
	for <freebsd-tech-jp@jp.freebsd.org>; Tue, 4 Mar 1997 16:58:26 +0900 (JST)
Received: from sranhc.sra.co.jp by sraigw.sra.co.jp (8.6.13/3.4W-sraigw)
	id QAA26790; Tue, 4 Mar 1997 16:58:10 +0900
Received: from sramha.sra.co.jp (sramha [133.137.48.146]) by sranhc.sra.co.jp (8.6.13/3.4W-srambox) with ESMTP id QAA22933; Tue, 4 Mar 1997 16:56:11 +0900
Received: from sran365.sra.co.jp (sran365.sra.co.jp [133.137.48.143]) by sramha.sra.co.jp (8.6.12+2.5Wb7/3.3W6-950712) with ESMTP id QAA20071; Tue, 4 Mar 1997 16:56:55 +0900
Received: from sran365.sra.co.jp (localhost [127.0.0.1]) by sran365.sra.co.jp (8.6.12+2.4W3/3.4Wbeta6-950927) with ESMTP id QAA27146; Tue, 4 Mar 1997 16:58:18 +0900
Message-Id: <199703040758.QAA27146@sran365.sra.co.jp>
From: Katsuya Abo <abo@sra.co.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
Cc: abo@sra.co.jp
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Date: Tue, 04 Mar 1997 16:58:17 +0900
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=19]
X-Sequence: FreeBSD-tech-jp 110
Subject: [FreeBSD-tech-jp 110] bug in BIOC[SG]RTIMEOUT ?? (FreeBSD-2.1.5-RELEASE)
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org

$B0BJ](B($B$"$\(B)$B$G$9!#(B

$B$3$N?t%v7n4V!"(B FreeBSD-2.1.5-RELEASE $B$r;H$C$F$$$k$N$G$9$,!"(B
	/usr/src/sys/net/bpf.c
$B$NCf$K2x$7$$%3!<%I$r8+$D$1$^$7$?!#(B
$BL@$i$+$J%P%0$r4^$s$G$$$k$H;W$C$F$$$^$9!#(B

$BK\Ev$O(B send-pr(1) $B$9$kFbMF$@$H;W$$$^$9$,!"$=$NA0$K$3$N(B ML $B$K=P$7$F$_$^(B
$B$9!#3'$5$s$N9M$($r$*J9$+$;$/$@$5$$!#(B

$B$A$J$_$K!"$h$j?7$7$$%P!<%8%g%s(B (-2.1.7, -2.2-GAMMA, -3.0-SNAP, ...) $B$G(B
$B$I$&$J$C$F$$$k$+$OCN$j$^$;$s!#<j85$K$3$l$i$N%=!<%9$r$*;}$A$NJ}$O!"$I$&(B
$B$J$C$F$$$k$+$r65$($F2<$5$$!#(B

$B0J2<$K(B bpf.c $B$N0lIt$r0zMQ$7$^$9!#(B RCS $B$N(B identifier $B$O<!$NDL$j$G$9!#(B
	$Id: bpf.c,v 1.7.4.5 1996/06/08 06:14:15 davidg Exp $

================
int
bpfioctl(dev, cmd, addr, flags, p)
	dev_t dev;
	int cmd;
	caddr_t addr;
	int flags;
	struct proc *p;
{
	register struct bpf_d *d = &bpf_dtab[minor(dev)];
	int s, error = 0;

	switch (cmd) {
.....($B>JN,(B).....
	/*
	 * Set read timeout.
	 */
	case BIOCSRTIMEOUT:
		{
			struct timeval *tv = (struct timeval *)addr;
			u_long msec;

			/* Compute number of milliseconds. */
			msec = tv->tv_sec * 1000 + tv->tv_usec / 1000;
			/* Scale milliseconds to ticks.  Assume hard
			   clock has millisecond or greater resolution
			   (i.e. tick >= 1000).  For 10ms hardclock,
			   tick/1000 = 10, so rtout<-msec/10. */
			d->bd_rtout = msec / (tick / 1000);
			break;
		}

	/*
	 * Get read timeout.
	 */
	case BIOCGRTIMEOUT:
		{
			struct timeval *tv = (struct timeval *)addr;
			u_long msec = d->bd_rtout;

			msec *= tick / 1000;
			tv->tv_sec = msec / 1000;
			tv->tv_usec = msec % 1000;
			break;
		}
.....($B>JN,(B).....
	}
	return (error);
}
================

$BLdBjE@$=$N#1!'(B
    case BIOCGRTIMEOUT $B$NCf$N(B
	tv->tv_usec = msec % 1000;
    $B$O!"(B
	tv->tv_usec = (msec % 1000) * 1000;
    $B$H$9$k$N$,@5$7$$$O$:$G$9!#(B

$BLdBjE@$=$N#2!'(B
    case BIOCSRTIMEOUT $B$NCf$G$O!"(B
	/* Scale milliseconds to ticks.  Assume hard
	   clock has millisecond or greater resolution
	   (i.e. tick >= 1000).  For 10ms hardclock,
	   tick/1000 = 10, so rtout<-msec/10. */
	d->bd_rtout = msec / (tick / 1000);
    $B$H$$$&$3$H$r$7$F$$$^$9$,!":#$I$-$N%^%7%s$G$O(B (tick >= 1000) $B$r2>Dj(B
    $B$9$k$N$O8=<BE*$G$O$J$/$J$j$D$D$"$k$N$G$O$H;W$$$^$9!#(B
    $B$^$?!"(B tick $B$,(B 1000 $B$NG\?t0J30$N$H$-$K$O@:EY$NLdBj$,$"$j$^$9!#(B

$B8D?ME*$K$O!"(B u_quad_t $B$r;H$C$F0J2<$N$h$&$K$9$k$N$,$$$$$H;W$C$F$$$^$9!#(B

================
	/*
	 * Set read timeout.
	 */
	case BIOCSRTIMEOUT:
		{
			struct timeval *tv = (struct timeval *)addr;
			u_quad_t usec;

			usec = tv->tv_sec * 1000000 + tv->tv_usec;
			d->bd_rtout = usec / tick;
			break;
		}

	/*
	 * Get read timeout.
	 */
	case BIOCGRTIMEOUT:
		{
			struct timeval *tv = (struct timeval *)addr;
			u_quad_t usec;

			usec = d->bd_rtout * tick;
			tv->tv_sec = usec / 1000000;
			tv->tv_usec = usec % 1000000;
			break;
		}
================

					$B0BJ]9n:H(B (Katsuya Abo)
					<abo@sra.co.jp>
