From owner-freebsd-net@FreeBSD.ORG Mon Jun 5 20:36:20 2006 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E311D16B1E9 for ; Mon, 5 Jun 2006 20:36:20 +0000 (UTC) (envelope-from gregorynou@altern.org) Received: from mail.visp.tiscali.fr (mailhub.isdnet.net [194.149.160.8]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7E6D243D48 for ; Mon, 5 Jun 2006 20:36:20 +0000 (GMT) (envelope-from gregorynou@altern.org) Received: from [172.16.16.196] (62.210.107.50) by mail.visp.tiscali.fr (7.1.026.1) id 44158DCE0031EE20 for freebsd-net@freebsd.org; Mon, 5 Jun 2006 22:36:15 +0200 Message-ID: <448495CF.4080303@altern.org> Date: Mon, 05 Jun 2006 22:36:31 +0200 From: Gregory Nou User-Agent: Thunderbird 1.5 (X11/20060113) MIME-Version: 1.0 To: freebsd-net@freebsd.org Content-Type: multipart/mixed; boundary="------------010403050609030009070703" Subject: [patch] taking M_PROMISC from netbsd X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Jun 2006 20:36:24 -0000 This is a multi-part message in MIME format. --------------010403050609030009070703 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, I've (tried) to import M_PROMISC from netbsd, as suggested in project Dingo. There is not much difference from manuel bouyer's patch (see http://mail-index.netbsd.org/tech-net/2003/03/19/0001.html and http://mail-index.netbsd.org/source-changes/2003/03/25/0020.html) I've made the patch against -CURRENT from today, and compiled it. I ran it for 1 month without problems, but I would appreciate if somebody could review it, and test it, as it is my first patch for freebsd. Thanks -- Gregory --------------010403050609030009070703 Content-Type: text/x-patch; name="M_PROMISC-3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="M_PROMISC-3.diff" diff -rcu sys.orig/net/if_bridgevar.h sys/net/if_bridgevar.h --- sys.orig/net/if_bridgevar.h Mon Jun 5 21:21:53 2006 +++ sys/net/if_bridgevar.h Sun Mar 26 19:15:03 2006 @@ -345,6 +345,7 @@ #define BRIDGE_INPUT(_ifp, _m) do { \ KASSERT(bridge_input_p != NULL, \ ("%s: if_bridge not loaded!", __func__)); \ + _m->m_flags &= ~M_PROMISC; \ _m = (*bridge_input_p)(_ifp, _m); \ if (_m != NULL) \ _ifp = _m->m_pkthdr.rcvif; \ diff -rcu sys.orig/net/if_ethersubr.c sys/net/if_ethersubr.c --- sys.orig/net/if_ethersubr.c Mon Jun 5 21:21:51 2006 +++ sys/net/if_ethersubr.c Mon Jun 5 21:46:18 2006 @@ -655,8 +655,7 @@ && bcmp(eh->ether_dhost, IF_LLADDR(ifp), ETHER_ADDR_LEN) != 0 && (ifp->if_flags & IFF_PPROMISC) == 0) { - m_freem(m); - return; + m->m_flags |= M_PROMISC; } } @@ -675,8 +674,12 @@ else m->m_flags |= M_MCAST; } - if (m->m_flags & (M_BCAST|M_MCAST)) + if (m->m_flags & (M_BCAST|M_MCAST)) { ifp->if_imcasts++; + if ((ifp->if_flags & IFF_PROMISC) != 0) { + m->m_flags |= M_PROMISC; + } + } #if defined(INET) || defined(INET6) post_stats: @@ -707,7 +710,9 @@ * or drop the packet. */ KASSERT(vlan_input_p != NULL,("ether_input: VLAN not loaded!")); + m->m_flags &= ~M_PROMISC; (*vlan_input_p)(ifp, m); + m_freem(m); return; } @@ -719,6 +724,7 @@ case ETHERTYPE_VLAN: if (ifp->if_vlantrunk != NULL) { KASSERT(vlan_input_p,("ether_input: VLAN not loaded!")); + m->m_flags &= ~M_PROMISC; (*vlan_input_p)(ifp, m); } else { ifp->if_noproto++; diff -rcu sys.orig/sys/mbuf.h sys/sys/mbuf.h --- sys.orig/sys/mbuf.h Mon Jun 5 21:22:51 2006 +++ sys/sys/mbuf.h Sun Mar 26 19:28:59 2006 @@ -179,6 +179,7 @@ #define M_FIRSTFRAG 0x1000 /* packet is first fragment */ #define M_LASTFRAG 0x2000 /* packet is last fragment */ #define M_VLANTAG 0x10000 /* packet has VLAN tag attached */ +#define M_PROMISC 0x20000 /* this packet is not for us */ /* * External buffer types: identify ext_buf type. --------------010403050609030009070703--