From owner-freebsd-bugs@FreeBSD.ORG Sat Jun 12 06:20:12 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AAF8C16A4CE for ; Sat, 12 Jun 2004 06:20:12 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 911F643D58 for ; Sat, 12 Jun 2004 06:20:12 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.11/8.12.11) with ESMTP id i5C6KBsa012936 for ; Sat, 12 Jun 2004 06:20:11 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i5C6KBbm012935; Sat, 12 Jun 2004 06:20:11 GMT (envelope-from gnats) Resent-Date: Sat, 12 Jun 2004 06:20:11 GMT Resent-Message-Id: <200406120620.i5C6KBbm012935@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Shingo WATANABE Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0F0BA16A4CE for ; Sat, 12 Jun 2004 06:13:25 +0000 (GMT) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 08D1243D41 for ; Sat, 12 Jun 2004 06:13:25 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.12.11/8.12.11) with ESMTP id i5C6DN6q094348 for ; Sat, 12 Jun 2004 06:13:23 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.11/8.12.11/Submit) id i5C6DNXn094336; Sat, 12 Jun 2004 06:13:23 GMT (envelope-from nobody) Message-Id: <200406120613.i5C6DNXn094336@www.freebsd.org> Date: Sat, 12 Jun 2004 06:13:23 GMT From: Shingo WATANABE To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Subject: kern/67862: if_udav failed to set the promiscuous mode X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Jun 2004 06:20:12 -0000 >Number: 67862 >Category: kern >Synopsis: if_udav failed to set the promiscuous mode >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Jun 12 06:20:10 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Shingo WATANABE >Release: FreeBSD 5.2-CURRENT >Organization: personal >Environment: FreeBSD hack.nabechan.org 5.2-CURRENT FreeBSD 5.2-CURRENT #0: Wed Jun 9 01:28:25 JST 2004 nabe@hack.nabechan.org:/usr/obj/usr/src/sys/HACK i386 >Description: The udav(4) driver was ported from NetBSD. This driver works well except for the promiscuous mode. To support the promiscuous mode udav(4) driver needs to handle the SIOCSIFFLAGS ioctl. This problem is caused by the difference of ether_ioctl() function between FreeBSD and NetBSD. I attached the patch to fix this problem, please commit this if it has not any problem. regards >How-To-Repeat: try to launch tcpdump using udav(4) interface. >Fix: apply the following patch. --- if_udav.c.org 2004-06-04 11:32:33.000000000 +0900 +++ if_udav.c 2004-06-04 11:51:24.000000000 +0900 @@ -1562,6 +1562,35 @@ #endif switch (cmd) { +#if defined(__FreeBSD__) + case SIOCSIFFLAGS: + if (ifp->if_flags & IFF_UP) { + if (ifp->if_flags & IFF_RUNNING && + ifp->if_flags & IFF_PROMISC) { + UDAV_SETBIT(sc, UDAV_RCR, + UDAV_RCR_ALL|UDAV_RCR_PRMSC); + } else if (ifp->if_flags & IFF_RUNNING && + !(ifp->if_flags & IFF_PROMISC)) { + if (ifp->if_flags & IFF_ALLMULTI) + UDAV_CLRBIT(sc, UDAV_RCR, + UDAV_RCR_PRMSC); + else + UDAV_CLRBIT(sc, UDAV_RCR, + UDAV_RCR_ALL|UDAV_RCR_PRMSC); + } else if (!(ifp->if_flags & IFF_RUNNING)) + udav_init(sc); + } else { + if (ifp->if_flags & IFF_RUNNING) + udav_stop(ifp, 1); + } + error = 0; + break; + case SIOCADDMULTI: + case SIOCDELMULTI: + udav_setmulti(sc); + error = 0; + break; +#endif case SIOCGIFMEDIA: case SIOCSIFMEDIA: mii = GET_MII(sc); @@ -1570,10 +1599,12 @@ default: error = ether_ioctl(ifp, cmd, data); +#if defined(__NetBSD__) if (error == ENETRESET) { udav_setmulti(sc); error = 0; } +#endif break; } >Release-Note: >Audit-Trail: >Unformatted: