From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 06:10:22 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0ADB616A403 for ; Sun, 4 Mar 2007 06:10:22 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id 56E5C13C474 for ; Sun, 4 Mar 2007 06:10:21 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l246AILK047312; Sun, 4 Mar 2007 09:10:19 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l246ADaV047307; Sun, 4 Mar 2007 09:10:13 +0300 (MSK) (envelope-from yar) Date: Sun, 4 Mar 2007 09:10:13 +0300 From: Yar Tikhiy To: Andre Oppermann Message-ID: <20070304061012.GF40430@comp.chem.msu.su> References: <45E8BB39.9030602@incunabulum.net> <20070303213406.GA40430@comp.chem.msu.su> <45E9FA3C.5030404@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45E9FA3C.5030404@freebsd.org> User-Agent: Mutt/1.5.9i Cc: freebsd-net@freebsd.org, Bruce M Simpson Subject: Re: CARP behaviour 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: Sun, 04 Mar 2007 06:10:22 -0000 On Sat, Mar 03, 2007 at 11:44:12PM +0100, Andre Oppermann wrote: > Yar Tikhiy wrote: > >On Sat, Mar 03, 2007 at 12:03:05AM +0000, Bruce M Simpson wrote: > >>During testing of M_PROMISC I noticed a couple of issues with our CARP. > >> > >>1. carp doesn't seem to maintain input/output statistics on its ifnet. > > > >This should be OK. A carp(4) interface is just a place for CARP > >settings to live. No real traffic passes through it. > > > >>2. carp doesn't seem to detect that the underlying route to the subnet > >> its address is exposed on changed to another interface. > > > >I seem to recollect that I ran into this issue, too. Of course, > >it's a bug. CARP apparently caches the old route forever. It > >should track such a change if it doesn't yet. We have a sort of > >notification for the event, don't we? The userland has the routing > >socket for that, but I don't remember about the kernel. > > We shouldn't cache route pointers anywhere anymore. It has been completely > removed from the PCBs and things like gif and others. Sounds like a good way to go, too! :-) Thanks! -- Yar From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 07:05:03 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A7EDB16A400 for ; Sun, 4 Mar 2007 07:05:03 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id 2092B13C478 for ; Sun, 4 Mar 2007 07:05:01 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l2474wDL047568; Sun, 4 Mar 2007 10:04:59 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l2474wOv047567; Sun, 4 Mar 2007 10:04:58 +0300 (MSK) (envelope-from yar) Date: Sun, 4 Mar 2007 10:04:58 +0300 From: Yar Tikhiy To: Bruce M Simpson Message-ID: <20070304070458.GG40430@comp.chem.msu.su> References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45EA0756.2000107@incunabulum.net> User-Agent: Mutt/1.5.9i Cc: freebsd-net@freebsd.org Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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: Sun, 04 Mar 2007 07:05:03 -0000 On Sat, Mar 03, 2007 at 11:40:06PM +0000, Bruce M Simpson wrote: > Yar Tikhiy wrote: > > > >In fact, there two independent flags indicating interface's readiness: > >IFF_UP and IFF_DRV_RUNNING. The former is controlled by the admin > >and the latter, by the driver. E.g., an interface can be UP but > >not really ready to operate due to h/w reasons, or vice versa. > >Perhaps we should check both flags to see if the interface is, so > >to say, up and running. if_vlan.c has an obvious macro for that, > >and it can go to if_var.h to avoid code duplication if we decide it's > >the right way to take. > > > Thanks for looking at this. > > The purpose of the IFF_UP check is to immediately drop frames destined > for an interface which is administratively configured down. > > Surely if ether_input() is called from the driver, there should be no > need to check IFF_DRV_RUNNING? Indeed if the hardware flips to a state > where it is not running but its internal queues or descriptor rings are > draining, this might cause frames to be lost? Now I see your point, thanks! Well, at least in theory, the driver shouldn't call ether_input() if the interface isn't running. OTOH, the interface shouldn't be getting traffic if it's !UP. However, I suspect that not all drivers handle IFF_UP fully or even can do it at all due to hardware limitations. As I understand it, in an ideal world a !UP interface should be deaf and dumb and not interfering in any way with the network still connected to it physically. Therefore discarding inbound traffic from a !UP interface may be a necessary workaround, but it may not be enough. All that boils down to this: The IFF_UP check in ether_input() is more to a sanity check than to the way for IFF_UP to work. Therefore we can add the IFF_DRV_RUNNING sanity check there, too, for completeness. -- Yar From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 15:04:02 2007 Return-Path: X-Original-To: freebsd-net@hub.freebsd.org Delivered-To: freebsd-net@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BD4BF16A400; Sun, 4 Mar 2007 15:04:02 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 92AD313C474; Sun, 4 Mar 2007 15:04:02 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from freefall.freebsd.org (bms@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l24F42CO051734; Sun, 4 Mar 2007 15:04:02 GMT (envelope-from bms@freefall.freebsd.org) Received: (from bms@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l24F42Ig051730; Sun, 4 Mar 2007 15:04:02 GMT (envelope-from bms) Date: Sun, 4 Mar 2007 15:04:02 GMT From: Bruce M Simpson Message-Id: <200703041504.l24F42Ig051730@freefall.freebsd.org> To: bms@FreeBSD.org, bms@FreeBSD.org, freebsd-net@FreeBSD.org Cc: Subject: Re: bin/94920: [rpc] rpc.statd(8) conflict with cups over tcp and udp ports 631 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: Sun, 04 Mar 2007 15:04:02 -0000 Synopsis: [rpc] rpc.statd(8) conflict with cups over tcp and udp ports 631 Responsible-Changed-From-To: bms->freebsd-net Responsible-Changed-By: bms Responsible-Changed-When: Sun Mar 4 15:03:40 UTC 2007 Responsible-Changed-Why: Someone else with Copious Free Time can do this -- not a priority for me. http://www.freebsd.org/cgi/query-pr.cgi?pr=94920 From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 15:04:24 2007 Return-Path: X-Original-To: freebsd-net@hub.freebsd.org Delivered-To: freebsd-net@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 76AE716A401; Sun, 4 Mar 2007 15:04:24 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 5022113C4A3; Sun, 4 Mar 2007 15:04:24 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from freefall.freebsd.org (bms@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l24F4Op0051779; Sun, 4 Mar 2007 15:04:24 GMT (envelope-from bms@freefall.freebsd.org) Received: (from bms@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l24F4OM9051775; Sun, 4 Mar 2007 15:04:24 GMT (envelope-from bms) Date: Sun, 4 Mar 2007 15:04:24 GMT From: Bruce M Simpson Message-Id: <200703041504.l24F4OM9051775@freefall.freebsd.org> To: bms@FreeBSD.org, bms@FreeBSD.org, freebsd-net@FreeBSD.org Cc: Subject: Re: bin/100969: [rpc.lockd] rpc.lockd conflict with cups over udp ports 631 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: Sun, 04 Mar 2007 15:04:24 -0000 Synopsis: [rpc.lockd] rpc.lockd conflict with cups over udp ports 631 Responsible-Changed-From-To: bms->freebsd-net Responsible-Changed-By: bms Responsible-Changed-When: Sun Mar 4 15:04:14 UTC 2007 Responsible-Changed-Why: Someone else with Copious Free Time can do this -- not a priority for me. http://www.freebsd.org/cgi/query-pr.cgi?pr=100969 From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 16:06:22 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 61EE216A400; Sun, 4 Mar 2007 16:06:22 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from pobox.codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id 147E213C491; Sun, 4 Mar 2007 16:06:21 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by pobox.codelabs.ru with esmtpsa (TLSv1:AES256-SHA:256) id 1HNtE3-000NBh-Js; Sun, 04 Mar 2007 19:06:20 +0300 Date: Sun, 4 Mar 2007 19:06:14 +0300 From: Eygene Ryabinkin To: freebsd-net@freebsd.org Message-ID: <20070304160613.GN80319@codelabs.ru> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> Sender: rea-fbsd@codelabs.ru X-Spam-Status: No, score=-3.4 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_00 Cc: rik@FreeBSD.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Sun, 04 Mar 2007 16:06:22 -0000 Good day, the freebsd-net readers. Perhaps someone can look at the kern/109815 and provide some feedback. Citing my PR: > >When if_bridge is used to gather multiple vlan interfaces that have > >the same physical parent (I will call such vlan interfaces the 'vlan > >group') the interface identifier that will be passed to the > >pfil_hooks will be sometimes wrong. For all packets coming from the > >'vlan group' and destined to some local interface the incoming interface > >passed to the pfil_hooks will be the last interface in that group > >regardless of the actual incoming interface. The 'last interface' is > >the interface that was added to the if_bridge at the very last 'addm' > >command. > > > >The problem is lying in the fact that MAC addresses of the 'vlan group' > >are just the same and they are equal to the MAC address of the parent > >interface. And the check for the unicat packet that is destined for > >'us' in the if_bridge.c:bridge_input() is walking by the list of the > >if_bridge-attached interfaces and compares the MAC addresses to the > >packet's one. Once match is found the interface in the packet header > >will be rewritten to the found list entry's one. Apparently such > >code flow will select the last added interface from the 'vlan group' > >because FreeBSD list macros are adding list members to the beginning > >of the linked list. > > > >BPF will receive the right interface, because it is tapped before > >bridge_input (in if_ethersubr.c). Roman Kurakin suggested that the patch can break some things: Sun, Mar 04, 2007 at 01:08:40AM +0300, Roman Kurakin wrote: > The idea behind current code could be that in case of bridge the > interface for which this packet in?nded is much more important > than the physical interface it is arrived from. > If this is the case, than it would be much better do the same logic > for ifp and in case it is not that interface to check the list. > This will fix the problem in case of vlans and will leave the old > behavior for the other cases. > > Any comments? I've slightly elaborated his idea and commented on it: Sun, Mar 04, 2007 at 09:22:03AM +0300, Eygene Ryabinkin wrote: > > So, you're saying the following: let us have two interfaces in the > bridge ifA and ifB with the MAC-A and MAC-B. In the current situation > packet coming from the physical interface ifA but destined to the > MAC-B, then the interface seen by the packet filter will be ifB and > not the ifA. Right? > > In principle, this situation can be used for something. But then we > should at least teah BPF to behave this way, because as you remember > from spending three hours before the console with me and trying to > diagnose the problem with tcpdump we were amazed to see the discrepance > between bpf and pfil. So it should be at least documented. > > But as I understand, my patch will let the described situation to > work as usual -- packets will still be delivered to the ifB, but > packet filter will see the physical incoming interface. The patch > should not break the delivery of the packet since all I do is the > change of the rcvif. Or I am wrong? I traced the current if_bridge.c behaviour to the NetBSD's if_bridge.c 1.9. This was the first version in that the firewall hooks were introduced. And the assumtion that the MAC identifies the physical interfaces was used in this first version. And a question: can anyone say if my patch will break some known good behaviour and if the current behaviour of if_bridge is based on some logic I am currently failing to understand. Thank you! -- Eygene From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 16:46:25 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4660A16A403 for ; Sun, 4 Mar 2007 16:46:25 +0000 (UTC) (envelope-from t-momose@kame.net) Received: from doller.momose.org (203.141.155.85.static.zoot.jp [203.141.155.85]) by mx1.freebsd.org (Postfix) with ESMTP id D3AF313C48E for ; Sun, 4 Mar 2007 16:46:24 +0000 (UTC) (envelope-from t-momose@kame.net) Received: from [10.0.0.81] ([10.0.0.81]) (authenticated bits=0) by doller.momose.org (8.13.8/8.13.8) with ESMTP id l24GFNZX044426; Mon, 5 Mar 2007 01:15:23 +0900 (JST) (envelope-from t-momose@kame.net) In-Reply-To: <45E81F98.8040205@cisco.com> References: <45E541A2.4020005@cisco.com> <200702281233.50145.max@love2party.net> <0D7E7D0C-80DA-4F8E-8008-A39F3A4C9EBD@kame.net> <45E81F98.8040205@cisco.com> Mime-Version: 1.0 (Apple Message framework v752.3) Content-Type: text/plain; charset=ISO-2022-JP; delsp=yes; format=flowed Message-Id: <8873598E-07FE-49A3-A103-0E5A45FA8FC0@kame.net> Content-Transfer-Encoding: 7bit From: Tsuyoshi MOMOSE Date: Mon, 5 Mar 2007 01:15:22 +0900 To: Randall Stewart X-Mailer: Apple Mail (2.752.3) Cc: Max Laier , freebsd-net@freebsd.org, shisa-core@sfc.wide.ad.jp, Momose Tsuyoshi Subject: Re: Thinking about IPv6 and DEPRECATED addresses 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: Sun, 04 Mar 2007 16:46:25 -0000 On 2007/03/02, at 21:59, Randall Stewart wrote: > Well it might meet some of them.. I need to know when DAD is done, but > also if a interface detaches.. aka stops hearing the RT adverts.. and > then later starts hearing them again.. > > I was thinking of all the various states V6 addresses go through.. > > Now, I would love to look at your "patch" if you could send it > to me.. and see if it can be the basis for what I want. I have not the patch that focus the part yet, but SHISA has already the patch for NetBSD-current of whole MIP6. It might be used for your purpose. > Will you be at the WIDE meeting next week? Or maybe BSD Asia. > > If so maybe we could meet up to discuss this :-) Unfortunately, maybe I will not neither. But other SHISA guys will. They will find you at the WIDE meeting and show you the NetBSD- current patch of SHISA. And please discuss the issues what you think there. ---------------------------- Tsuyoshi MOMOSE / ももせつよし momose@momose.org http://www.momose.org/ (Underconstruction) From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 17:22:36 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 56E8616A402 for ; Sun, 4 Mar 2007 17:22:36 +0000 (UTC) (envelope-from smithi@nimnet.asn.au) Received: from gaia.nimnet.asn.au (nimbin.lnk.telstra.net [139.130.45.143]) by mx1.freebsd.org (Postfix) with ESMTP id 61FFB13C442 for ; Sun, 4 Mar 2007 17:22:33 +0000 (UTC) (envelope-from smithi@nimnet.asn.au) Received: from localhost (smithi@localhost) by gaia.nimnet.asn.au (8.8.8/8.8.8R1.5) with SMTP id EAA26273; Mon, 5 Mar 2007 04:22:25 +1100 (EST) (envelope-from smithi@nimnet.asn.au) Date: Mon, 5 Mar 2007 04:22:24 +1100 (EST) From: Ian Smith To: Alexander Motin In-Reply-To: <45E9E4BF.4040403@alkar.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: freebsd-net@freebsd.org Subject: Re: mpd 4.1 on 5.5-STABLE 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: Sun, 04 Mar 2007 17:22:36 -0000 On Sat, 3 Mar 2007, Alexander Motin wrote: > Ian Smith wrote: > > When started the first time, before there's any ng0 interface, mpd logs > > the following two lines then immediately exits without further ado: > > > > paqi# /usr/local/etc/rc.d/mpd4.sh start > > Try to run mpd from console just by typing "mpd4" to get all logs to > console. To get more logs you can add to the begining of mpd.conf > command "log +all". Thanks for your prompt help Alexander; I've been at it most of today. That works fine. What doesn't work here, very repeatably, is mpd4 -b I can send some more details offlist if you like, but in a nutshell, mpd4 -b syslogs the intro line, then sometimes another one, maybe two: Mar 4 20:03:16 paqi mpd: process 39879 started, version 4.1 (root@paqi.nimnet.asn.au 20:51 3-Mar-2007) Mar 4 20:03:16 paqi mpd: CONSOLE: listening on 127.0.0.1 5005 Mar 4 20:03:16 paqi mpd: [b_PPPoE] exec: /sbin/ifconfig xe0 up then just disappears; no (logged) message, no core. Some other times it keeps running but responds to neither telnet nor kill, short of kill -9. Either way, it creates then leaves its netgraph stuff behind. But when started in foreground without -b it's solid, and afaik so far, working fine as indicated by a couple of test connections to $provider. Once started, ^Z,bg puts it in background where it's happy to run, also if started with 'mpd4 -p /var/run/mpd4.pid >/dev/null &' so I've hacked /usr/local/etc/rc.d/mpd4.sh to do that on 'start' .. also working well. > > 'ifconfig ng0 destroy' won't. So then, now mpd will start, uselessly: > > ngX interfaces can be shutted down only from inside of netgraph by > "ngctl shutdown ngX:" command. The colon makes all the difference; ngctl(8) is kinda light on examples, and I couldn't figure what meant there till browsing netgraph(4) > > new -i ng0 PPPoE PPPoE > > -i parameter is not recommended for use. If you remove it, mpd will just > use first free ngX interface. I only read all the web docs twice, and trusted all the samples :) Anyway, when not run with -b which reliably fails here, mpd4 runs and cleans up after itself nicely, however stopped. I'm now using new b_PPPoE l_PPPoE which makes learning about the beast from its logs a bit easier for me. > > One thing makes me a bit nervous: those ipv6 and inet6 hooks. kernel is > > compiled without INET6, new kernel/world built with make.conf having: > > NOINET6=true # do not build IPv6 related programs and libraries > > WITHOUT_IPV6=true > > I don't think that this should be a problem. Neither do I .. but there seems to be something different here, assuming you haven't heard of -b mode failing reliably on other 5.5-S systems? Happy to try anything else over the next few days, before it's up 24/7 Cheers, Ian PS a bit of 'lastcomm -eE -f /var/account/acct.0 | grep mpd4' to show how fast those -b attempts were exiting (except those that hung, FX): mpd4 - root ttyp0 1245.00 es Sun Mar 4 23:54 mpd4 -FX root __ 285.00 es Sun Mar 4 23:28 mpd4 - root ttyp0 0.12 es Sun Mar 4 23:24 mpd4 - root ttyp0 1843.00 es Sun Mar 4 21:57 mpd4 - root ttyp0 1506.00 es Sun Mar 4 21:18 mpd4 - root ttyp0 60.36 es Sun Mar 4 20:16 mpd4 -FX root __ 111.55 es Sun Mar 4 20:14 mpd4 - root ttyp0 0.08 es Sun Mar 4 20:13 mpd4 - root ttyp0 393.50 es Sun Mar 4 20:12 mpd4 -F root __ 0.03 es Sun Mar 4 20:04 mpd4 - root ttyp0 0.08 es Sun Mar 4 20:04 mpd4 -F root __ 0.03 es Sun Mar 4 20:03 mpd4 - root ttyp0 0.08 es Sun Mar 4 20:03 mpd4 - root ttyp0 104.34 es Sun Mar 4 20:02 From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 18:11:48 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0BF8416A400 for ; Sun, 4 Mar 2007 18:11:48 +0000 (UTC) (envelope-from mav@alkar.net) Received: from cmail.optima.ua (cmail.optima.ua [195.248.191.121]) by mx1.freebsd.org (Postfix) with ESMTP id 8928513C467 for ; Sun, 4 Mar 2007 18:11:47 +0000 (UTC) (envelope-from mav@alkar.net) Received: from [195.248.178.122] (account mav@alkar.net HELO [192.168.3.2]) by cmail.optima.ua (CommuniGate Pro SMTP 5.0.11) with ESMTPA id 21392725; Sun, 04 Mar 2007 20:11:46 +0200 Message-ID: <45EB0BDC.8030204@alkar.net> Date: Sun, 04 Mar 2007 20:11:40 +0200 From: Alexander Motin User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.13) Gecko/20060414 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Ian Smith References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: mpd 4.1 on 5.5-STABLE 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: Sun, 04 Mar 2007 18:11:48 -0000 Ian Smith wrote: > mpd4 -b syslogs the intro line, then sometimes another one, maybe two: > > Mar 4 20:03:16 paqi mpd: process 39879 started, version 4.1 (root@paqi.nimnet.asn.au 20:51 3-Mar-2007) > Mar 4 20:03:16 paqi mpd: CONSOLE: listening on 127.0.0.1 5005 > Mar 4 20:03:16 paqi mpd: [b_PPPoE] exec: /sbin/ifconfig xe0 up > > then just disappears; no (logged) message, no core. Some other times it > keeps running but responds to neither telnet nor kill, short of kill -9. Mpd tryes to process all possible signals to make clean shutdown. Sometimes it can, but sometimes it can't. In such cases it is recommended to comment out signal(SIGSEGV, SendSignal); signal(SIGBUS, SendSignal); signal(SIGABRT, SendSignal); lines in main.c to let it crash and make core dump. Try to do it to get core and use gdb to locate crash reason. > Neither do I .. but there seems to be something different here, assuming > you haven't heard of -b mode failing reliably on other 5.5-S systems? I have not. -- Alexander Motin mav@alkar.net Optima Telecom From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 22:25:07 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 89D1E16A403 for ; Sun, 4 Mar 2007 22:25:07 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 4F71113C442 for ; Sun, 4 Mar 2007 22:25:07 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id DBD071F52FE for ; Sun, 4 Mar 2007 17:25:06 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Sun, 04 Mar 2007 17:25:06 -0500 X-Sasl-enc: ESH+0kSbbjoHl6xwvRfVmfMLMQ9CbLNP0Gln2KT2o/Pw 1173047106 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id B0CC510B50 for ; Sun, 4 Mar 2007 17:25:06 -0500 (EST) Message-ID: <45EB4741.6000102@incunabulum.net> Date: Sun, 04 Mar 2007 22:25:05 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: freebsd-net@freebsd.org Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [PATCH] IP_SENDIF option; rework ip_output() source selection logic 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: Sun, 04 Mar 2007 22:25:07 -0000 Hello, Thanks to andre making a start on this, I have managed to get the IP_SENDIF option implemented today in p4 bms_netdev. Here's a patch against -CURRENT: http://people.freebsd.org/~bms/dump/sendif-20070304.diff For those who are new to this work: IP_SENDIF is broadly an analogue of the Linux socket option SO_BINDTODEVICE. It is used to bypass the traditional BSD source interface selection logic. It is a sledgehammer hack used to output datagrams on a specific interface which may not yet have an address, e.g. for DHCP. Judicious use of this option, together with IP_ONESBCAST, will make it possible for dhclient to run without BPF support in the base system. There are a few remaining issues around this code which need to be dealt with. These are: * Fix IP_SENDIF and IP_SENDSRCADDR for unbound sockets. This goes without saying. For these options to be useful the socket should not have to be bound anywhere. The fact that IP_SENDSRCADDR is currently broken contradicts both our documentation and UNIX Network Programming Vol 1 3rd Edition. * Allow IP_SENDIF to be used from the raw IP output path. Some people might want to do this. * Add a specific privilege level for IP_SENDIF. Currently it requires the 'open raw socket' privilege, as it is Not Normal Behaviour. * Disable hardware checksums on output, if we have to do that. My testing with msk(4) suggests this might not be needed. When/if we adopt NetBSD's source selection policy concept (e.g. for fully supporting link-local IPv4) this code will most likely have to be updated, and/or when/if we adopt equal-cost multipath. The hack IP_ONESBCAST itself may eventually be eliminated by doing things slightly differently in the forwarding trie i.e. using interface preference and/or IP_SENDIF and populating the trie with 255.255.255.255 routes. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 22:26:30 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DEEF116A407; Sun, 4 Mar 2007 22:26:30 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id B4E6F13C441; Sun, 4 Mar 2007 22:26:30 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 842CE1F53CB; Sun, 4 Mar 2007 17:26:30 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Sun, 04 Mar 2007 17:26:30 -0500 X-Sasl-enc: VQOGTdXcNLeS+TPif3pEH04VmDXksaDD63qQl9puSmKr 1173047190 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 36FB610A58; Sun, 4 Mar 2007 17:26:29 -0500 (EST) Message-ID: <45EB4794.6040404@incunabulum.net> Date: Sun, 04 Mar 2007 22:26:28 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Yar Tikhiy References: <45E8BB39.9030602@incunabulum.net> <20070303213406.GA40430@comp.chem.msu.su> <45E9FA3C.5030404@freebsd.org> <20070304061012.GF40430@comp.chem.msu.su> In-Reply-To: <20070304061012.GF40430@comp.chem.msu.su> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org, Andre Oppermann Subject: Re: CARP behaviour 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: Sun, 04 Mar 2007 22:26:31 -0000 Yar Tikhiy wrote: >> We shouldn't cache route pointers anywhere anymore. It has been completely >> removed from the PCBs and things like gif and others. >> > Sounds like a good way to go, too! :-) Thanks! > gre(4) does very funky things with the route it caches to the tunnel endpoint. Someone(tm) should have a look at that. BMS From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 22:32:57 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 32AF216A402; Sun, 4 Mar 2007 22:32:57 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id F3F0E13C467; Sun, 4 Mar 2007 22:32:56 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id CF6A11F543A; Sun, 4 Mar 2007 17:32:56 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Sun, 04 Mar 2007 17:32:56 -0500 X-Sasl-enc: bLOb3i5223jvpT6iiysPd1AWsvFbsN20aaeopQZ9Frfj 1173047576 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id E08F433752; Sun, 4 Mar 2007 17:32:54 -0500 (EST) Message-ID: <45EB4915.1090703@FreeBSD.org> Date: Sun, 04 Mar 2007 22:32:53 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Eygene Ryabinkin References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> In-Reply-To: <20070304160613.GN80319@codelabs.ru> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Sun, 04 Mar 2007 22:32:57 -0000 Hi, I haven't seen your patch, can you point me at it off-list? Thanks. Eygene Ryabinkin wrote: > > I traced the current if_bridge.c behaviour to the NetBSD's if_bridge.c > 1.9. This was the first version in that the firewall hooks were > introduced. And the assumtion that the MAC identifies the physical > interfaces was used in this first version. > > And a question: can anyone say if my patch will break some known > good behaviour and if the current behaviour of if_bridge is based > on some logic I am currently failing to understand. > I would greatly appreciate it if you could look at the combined M_PROMISC and 802.1p patch, which rewrites ether_input() significantly. It sounds like the issues you are having with vlans and bridges may potentially be fixed by this patch, or that the fix may be incorporated more easily with this patch. In NetBSD, after if_bridge is given a chance to claim an input frame, the ifp may be changed if the bridge needs to forward locally. M_PROMISC is used to indicate that a frame was received promiscuously, in case ether_input() re-enters itself with the same mbuf chain. Certain consumers of ether_input() need to punch holes in the logic used to detect if a frame was for us or not because they do funky things with Ethernet destination addresses, e.g. carp. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Sun Mar 4 23:56:26 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E437616A400 for ; Sun, 4 Mar 2007 23:56:25 +0000 (UTC) (envelope-from smw2010@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.232]) by mx1.freebsd.org (Postfix) with ESMTP id 9FFB913C441 for ; Sun, 4 Mar 2007 23:56:25 +0000 (UTC) (envelope-from smw2010@gmail.com) Received: by wr-out-0506.google.com with SMTP id 55so2054649wri for ; Sun, 04 Mar 2007 15:56:25 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=MjvgYRGEAhj7QF/kIVlHTAkbjZC3a93xDVO95FZeq0cWpWmVrCxIyjGYeuTh5MztnJnf+vgl4cGePCC9J2G6mAUwwTEX5yTUKAOTFhkOPjuSLUw6xe8hBq03nsb+ypdxyLKSTflerMU2MhYEwia2Ed5yUxUd9evvQLLqEl/MK9s= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=WcHT7Vfbg7I7y+WMFLNgXMLBh4xke3hl/dLiHeodyhgg94nhDYTjK6ow0ZHf+2qhUXRyg4oYO+2KsAXBaR7rc9g4EWNFqxfYBQWsZnlhJEA2NCWQedrvG30IYXr+3rResGXdxgHfY3V3PwxMGxIaBRvhHlUh5xn34sDHfyKQ984= Received: by 10.114.93.1 with SMTP id q1mr1065835wab.1173050866014; Sun, 04 Mar 2007 15:27:46 -0800 (PST) Received: by 10.114.13.3 with HTTP; Sun, 4 Mar 2007 15:27:45 -0800 (PST) Message-ID: Date: Mon, 5 Mar 2007 10:27:45 +1100 From: "Sam Wun" To: "Bruce M Simpson" In-Reply-To: <45EB4794.6040404@incunabulum.net> MIME-Version: 1.0 References: <45E8BB39.9030602@incunabulum.net> <20070303213406.GA40430@comp.chem.msu.su> <45E9FA3C.5030404@freebsd.org> <20070304061012.GF40430@comp.chem.msu.su> <45EB4794.6040404@incunabulum.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: freebsd-net@freebsd.org Subject: Re: CARP behaviour 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: Sun, 04 Mar 2007 23:56:26 -0000 On 3/5/07, Bruce M Simpson wrote: > > Yar Tikhiy wrote: > >> We shouldn't cache route pointers anywhere anymore. It has been > completely > >> removed from the PCBs and things like gif and others. > >> > > Sounds like a good way to go, too! :-) Thanks! > > > gre(4) does very funky things with the route it caches to the tunnel > endpoint. Someone(tm) should have a look at that. Does F5 BigIP have that issue? BMS > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 00:56:37 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 87F0316A400 for ; Mon, 5 Mar 2007 00:56:37 +0000 (UTC) (envelope-from silby@silby.com) Received: from relay01.pair.com (relay01.pair.com [209.68.5.15]) by mx1.freebsd.org (Postfix) with SMTP id 2D33C13C478 for ; Mon, 5 Mar 2007 00:56:37 +0000 (UTC) (envelope-from silby@silby.com) Received: (qmail 50665 invoked from network); 5 Mar 2007 00:56:34 -0000 Received: from 209.68.2.70 (HELO localhost) (209.68.2.70) by relay01.pair.com with SMTP; 5 Mar 2007 00:56:34 -0000 X-pair-Authenticated: 209.68.2.70 Date: Sun, 4 Mar 2007 18:56:29 -0600 (CST) From: Mike Silbersack To: Peter Jeremy In-Reply-To: <20070302234240.GA9421@turion.vk2pj.dyndns.org> Message-ID: <20070304185441.T10411@odysseus.silby.com> References: <20070302234240.GA9421@turion.vk2pj.dyndns.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-net@freebsd.org Subject: Re: TCP source port reuse problems 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 Mar 2007 00:56:37 -0000 On Sat, 3 Mar 2007, Peter Jeremy wrote: > First problem: FreeBSD appears to be re-using source ports too > rapidly. My understanding is that a TCP socket ({src IP, src port, > dst IP, dst port} tuple) should not be re-used for 120 seconds after > teardown. Sample tcpdumps and IPfilter whinges below show reuse > after 66 and 83 seconds. That's an incorrect understanding. TIME_WAIT recycling has been in the BSD network stack for a long time, and Windows/Linux handle it also. IPFilter is clearly broken if it's blocking the reuse of the port after 66 seconds. You should ask Darren to fix its state table. Mike "Silby" Silbersack From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 01:06:32 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 90BDB16A400 for ; Mon, 5 Mar 2007 01:06:32 +0000 (UTC) (envelope-from silby@silby.com) Received: from relay00.pair.com (relay00.pair.com [209.68.5.9]) by mx1.freebsd.org (Postfix) with SMTP id 3592C13C491 for ; Mon, 5 Mar 2007 01:06:31 +0000 (UTC) (envelope-from silby@silby.com) Received: (qmail 42277 invoked from network); 5 Mar 2007 01:06:31 -0000 Received: from 209.68.2.70 (HELO localhost) (209.68.2.70) by relay00.pair.com with SMTP; 5 Mar 2007 01:06:31 -0000 X-pair-Authenticated: 209.68.2.70 Date: Sun, 4 Mar 2007 19:06:27 -0600 (CST) From: Mike Silbersack To: Peter Jeremy In-Reply-To: <20070302234240.GA9421@turion.vk2pj.dyndns.org> Message-ID: <20070304190432.D10411@odysseus.silby.com> References: <20070302234240.GA9421@turion.vk2pj.dyndns.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-net@freebsd.org Subject: Re: TCP source port reuse problems 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 Mar 2007 01:06:32 -0000 On Sat, 3 Mar 2007, Peter Jeremy wrote: > Disabling net.inet.ip.portrange.randomized appears to work around this > but is undesirable for other reasons. I should add that in the short term, that does seem to be the only solution. Fernando Gont has some ideas on how to make port reuse happen less frequently, so maybe we'll have those in place for FreeBSD 6.3 if all goes well. Mike "Silby" Silbersack From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 01:40:30 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 508A416A400 for ; Mon, 5 Mar 2007 01:40:30 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 14B8013C4B5 for ; Mon, 5 Mar 2007 01:40:30 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id C1FD61F4E80; Sun, 4 Mar 2007 20:40:29 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Sun, 04 Mar 2007 20:40:29 -0500 X-Sasl-enc: TxSGZrvlgundEiLhNbur6mGCnLvIwBaJ0RYwr3C/d3Z+ 1173058829 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 1BE221B255; Sun, 4 Mar 2007 20:40:27 -0500 (EST) Message-ID: <45EB750A.90105@incunabulum.net> Date: Mon, 05 Mar 2007 01:40:26 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Yar Tikhiy References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> In-Reply-To: <20070304070458.GG40430@comp.chem.msu.su> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 01:40:30 -0000 Yar Tikhiy wrote: > > Now I see your point, thanks! Well, at least in theory, the driver > shouldn't call ether_input() if the interface isn't running. OTOH, > the interface shouldn't be getting traffic if it's !UP. However, > I suspect that not all drivers handle IFF_UP fully or even can do > it at all due to hardware limitations. As I understand it, in an > ideal world a !UP interface should be deaf and dumb and not interfering > in any way with the network still connected to it physically. > Therefore discarding inbound traffic from a !UP interface may be a > necessary workaround, but it may not be enough. All that boils > down to this: The IFF_UP check in ether_input() is more to a sanity > check than to the way for IFF_UP to work. Therefore we can add the > IFF_DRV_RUNNING sanity check there, too, for completeness. > Thanks for your explanation. I'm still not sure I understand why IFF_DRV_RUNNING should be checked for in ether_input(). There is a pretty clear reason for checking for IFF_UP in ether_input(); an interface which is configured administratively down should not be bringing traffic into the stack, regardless of whether it is a hardware device or a pseudo-device. IFF_UP has been in since 4.2BSD; it is more or less integral to how the BSD network stack operates. There are situations in which a pseudo-device or hardware device could incorrectly call ether_input() with such traffic. Reading , IFF_DRV_RUNNING is documented as meaning 'resources are allocated for this device'. Surely such a check is redundant and not relevant to the operation of ether_input()? As far as I can tell it is similar to the old meaning of IFF_RUNNING, and there are legitimate situations in which the hardware or its queues may have stopped processing temporarily whilst the interface may be administratively up (and thus accepting traffic). Please correct me if I'm wrong or point out situations where it's important IFF_DRV_RUNNING state is checked outside of a driver. Sorry if I seem obtuse, but I'm sure I'm missing some detail here. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 11:08:17 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0095816A47E for ; Mon, 5 Mar 2007 11:08:17 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id E150213C4BA for ; Mon, 5 Mar 2007 11:08:16 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (linimon@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l25B8Gc2037539 for ; Mon, 5 Mar 2007 11:08:16 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from linimon@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l25B8Fs8037535 for freebsd-net@FreeBSD.org; Mon, 5 Mar 2007 11:08:15 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 5 Mar 2007 11:08:15 GMT Message-Id: <200703051108.l25B8Fs8037535@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: linimon set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-net@FreeBSD.org Cc: Subject: Current problem reports assigned to you 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 Mar 2007 11:08:17 -0000 Current FreeBSD problem reports Critical problems Serious problems S Tracker Resp. Description -------------------------------------------------------------------------------- a kern/38554 net changing interface ipaddress doesn't seem to work s kern/39937 net ipstealth issue o kern/92552 net A serious bug in most network drivers from 5.X to 6.X s kern/95665 net [if_tun] "ping: sendto: No buffer space available" wit o kern/106722 net [net] [patch] ifconfig may not connect an interface to o kern/108542 net [bce]: Huge network latencies with 6.2-RELEASE / STABL o kern/109406 net [ndis] Broadcom WLAN driver 4.100.15.5 doesn't work wi 7 problems total. Non-critical problems S Tracker Resp. Description -------------------------------------------------------------------------------- s kern/19875 net A new protocol family, PF_IPOPTION, to handle IP optio o conf/23063 net [PATCH] for static ARP tables in rc.network s bin/41647 net ifconfig(8) doesn't accept lladdr along with inet addr o kern/54383 net [nfs] [patch] NFS root configurations without dynamic s kern/60293 net FreeBSD arp poison patch a bin/94920 net [rpc] rpc.statd(8) conflict with cups over tcp and udp o kern/95267 net packet drops periodically appear f kern/95277 net [netinet] IP Encapsulation mask_match() returns wrong o kern/100519 net [netisr] suggestion to fix suboptimal network polling a bin/100969 net [rpc.lockd] rpc.lockd conflict with cups over udp port o kern/102035 net [plip] plip networking disables parallel port printing o conf/102502 net [patch] ifconfig name does't rename netgraph node in n o conf/107035 net bridge interface given in rc.conf not taking an (stati 13 problems total. From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 12:37:06 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5F5B616A400 for ; Mon, 5 Mar 2007 12:37:06 +0000 (UTC) (envelope-from smithi@nimnet.asn.au) Received: from gaia.nimnet.asn.au (nimbin.lnk.telstra.net [139.130.45.143]) by mx1.freebsd.org (Postfix) with ESMTP id 176CC13C47E for ; Mon, 5 Mar 2007 12:37:04 +0000 (UTC) (envelope-from smithi@nimnet.asn.au) Received: from localhost (smithi@localhost) by gaia.nimnet.asn.au (8.8.8/8.8.8R1.5) with SMTP id XAA26663; Mon, 5 Mar 2007 23:36:50 +1100 (EST) (envelope-from smithi@nimnet.asn.au) Date: Mon, 5 Mar 2007 23:36:49 +1100 (EST) From: Ian Smith To: Alexander Motin In-Reply-To: <45EB0BDC.8030204@alkar.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: freebsd-net@freebsd.org Subject: Re: mpd 4.1 on 5.5-STABLE 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 Mar 2007 12:37:06 -0000 On Sun, 4 Mar 2007, Alexander Motin wrote: > Ian Smith wrote: > > mpd4 -b syslogs the intro line, then sometimes another one, maybe two: > > > > Mar 4 20:03:16 paqi mpd: process 39879 started, version 4.1 (root@paqi.nimnet.asn.au 20:51 3-Mar-2007) > > Mar 4 20:03:16 paqi mpd: CONSOLE: listening on 127.0.0.1 5005 > > Mar 4 20:03:16 paqi mpd: [b_PPPoE] exec: /sbin/ifconfig xe0 up > > > > then just disappears; no (logged) message, no core. Some other times it > > keeps running but responds to neither telnet nor kill, short of kill -9. > > Mpd tryes to process all possible signals to make clean shutdown. > Sometimes it can, but sometimes it can't. In such cases it is > recommended to comment out > signal(SIGSEGV, SendSignal); > signal(SIGBUS, SendSignal); > signal(SIGABRT, SendSignal); > lines in main.c to let it crash and make core dump. Try to do it to get > core and use gdb to locate crash reason. Ok, I did see segv mentioned once. Sorry, I have to file this for now and use my workaround, before building a debug kernel and learning gdb!, having services to relocate and rebuild over the next week or so. I'll likely have many more questions before I can make any contribution, and I think mpd is awesome. Blame Bruce Simpson for the good publicity! Thanks, Ian From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 14:21:07 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 091CA16A401; Mon, 5 Mar 2007 14:21:07 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id D0E1D13C442; Mon, 5 Mar 2007 14:21:06 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 59F101F5BCA; Mon, 5 Mar 2007 09:21:06 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Mon, 05 Mar 2007 09:21:06 -0500 X-Sasl-enc: VDDtqdCIm7LyV5kOtEHPkRgRcYXTlRZHt4gxeNkGimM5 1173104466 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id ACE8423F7F; Mon, 5 Mar 2007 09:21:05 -0500 (EST) Message-ID: <45EC274F.7090201@FreeBSD.org> Date: Mon, 05 Mar 2007 14:21:03 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Eygene Ryabinkin , Andrew Thompson References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EB4915.1090703@FreeBSD.org> <45EB4FD7.2000708@inse.ru> <45EB5869.1010100@FreeBSD.org> <20070305125133.GR80319@codelabs.ru> In-Reply-To: <20070305125133.GR80319@codelabs.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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 Mar 2007 14:21:07 -0000 Eygene Ryabinkin wrote: > Will try to understand if it will cure my problem, thanks! > Attaching my patch, just in case if freebsd gnats will be down ;)) > Thanks for this. It looks like Andrew may be in a better position to say if this fix should go in or not. It is possible that if bridge changes the ifp and that the frame should be forwarded locally, i.e. to the upper protocol layers, that ifp should also be updated in ether_input() (as NetBSD does) to make sure that the later checks are against the updated ifp. I have just changed this behaviour in p4 bms_netdev. Please try to test with this code. If you can't access p4, then I can extract an updated patch though this will take longer. This should help to eliminate the need for DEV_CARP compile-time conditionals in if_bridge(4). Regards, BMS From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 14:24:27 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E672116A400 for ; Mon, 5 Mar 2007 14:24:27 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id BEFE113C428 for ; Mon, 5 Mar 2007 14:24:24 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l25EOI7t068598; Mon, 5 Mar 2007 17:24:18 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l25EOCs7068584; Mon, 5 Mar 2007 17:24:12 +0300 (MSK) (envelope-from yar) Date: Mon, 5 Mar 2007 17:24:12 +0300 From: Yar Tikhiy To: Bruce M Simpson Message-ID: <20070305142411.GC57253@comp.chem.msu.su> References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45EB750A.90105@incunabulum.net> User-Agent: Mutt/1.5.9i Cc: freebsd-net@freebsd.org Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 14:24:28 -0000 On Mon, Mar 05, 2007 at 01:40:26AM +0000, Bruce M Simpson wrote: > Yar Tikhiy wrote: > > > >Now I see your point, thanks! Well, at least in theory, the driver > >shouldn't call ether_input() if the interface isn't running. OTOH, > >the interface shouldn't be getting traffic if it's !UP. However, > >I suspect that not all drivers handle IFF_UP fully or even can do > >it at all due to hardware limitations. As I understand it, in an > >ideal world a !UP interface should be deaf and dumb and not interfering > >in any way with the network still connected to it physically. > >Therefore discarding inbound traffic from a !UP interface may be a > >necessary workaround, but it may not be enough. All that boils > >down to this: The IFF_UP check in ether_input() is more to a sanity > >check than to the way for IFF_UP to work. Therefore we can add the > >IFF_DRV_RUNNING sanity check there, too, for completeness. > > > Thanks for your explanation. > > I'm still not sure I understand why IFF_DRV_RUNNING should be checked > for in ether_input(). > > There is a pretty clear reason for checking for IFF_UP in ether_input(); > an interface which is configured administratively down should not be > bringing traffic into the stack, regardless of whether it is a hardware > device or a pseudo-device. IFF_UP has been in since 4.2BSD; it is more > or less integral to how the BSD network stack operates. There are > situations in which a pseudo-device or hardware device could incorrectly > call ether_input() with such traffic. > > Reading , IFF_DRV_RUNNING is documented as meaning 'resources > are allocated for this device'. Surely such a check is redundant and not > relevant to the operation of ether_input()? As far as I can tell it is > similar to the old meaning of IFF_RUNNING, and there are legitimate > situations in which the hardware or its queues may have stopped > processing temporarily whilst the interface may be administratively up > (and thus accepting traffic). > > Please correct me if I'm wrong or point out situations where it's > important IFF_DRV_RUNNING state is checked outside of a driver. Sorry if > I seem obtuse, but I'm sure I'm missing some detail here. My concern is that, with possible callers of ether_input() being not really *from* but *on behalf* of the interface, e.g., in Netgraph, IFF_DRV_RUNNING can be a way for the interface driver to tell us: I'm not ready yet, so don't believe anyone who pretends he has a packet from me. E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is properly attached to an Ethernet interface (known as the vlan's parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. Now assume that a vlan interface is UP but not RUNNING because it's detached from the parent. If a buggy Netgraph node or another source of synthetic traffic decides to inject a packet as though it comes in from the said vlan interface, handling the packet as usual will be bogus. IMHO the IFF_UP check in ether_input() is mostly for a similar purpose: If all callers of ether_input() were in real and conformant interface drivers, we shouldn't bother re-checking IFF_UP in ether_input() either because the driver of a down interface wouldn't call ether_input() for it in the first place. So I view the checks in ether_input() as a way to work around broken drivers and simplify synthetic callers of ether_input(). In fact, the whole first part of ether_input() is for that: It essentially verifies the caller's conformance. I mean the checks for the proper mbuf flags and length, recvif, etc. Of course, we can omit the check for IFF_DRV_RUNNING if we think that synthetic traffic from an unready interface is OK. But I'm afraid we shouldn't. In addition, I wonder if we can move the conformance checks to a wrapper function so that conformant drivers don't have to pay the performance penalty of the "just in case" checks per each inbound Ethernet packet. -- Yar From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 14:35:13 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4C7DA16A401 for ; Mon, 5 Mar 2007 14:35:13 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id A1AEB13C4B3 for ; Mon, 5 Mar 2007 14:35:12 +0000 (UTC) (envelope-from andre@freebsd.org) Received: (qmail 30633 invoked from network); 5 Mar 2007 14:07:12 -0000 Received: from c00l3r.networx.ch (HELO [127.0.0.1]) ([62.48.2.2]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 5 Mar 2007 14:07:12 -0000 Message-ID: <45EC2AA8.8060302@freebsd.org> Date: Mon, 05 Mar 2007 15:35:20 +0100 From: Andre Oppermann User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 To: Yar Tikhiy References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> In-Reply-To: <20070305142411.GC57253@comp.chem.msu.su> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org, Bruce M Simpson Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 14:35:13 -0000 Yar Tikhiy wrote: > On Mon, Mar 05, 2007 at 01:40:26AM +0000, Bruce M Simpson wrote: >> Yar Tikhiy wrote: >>> Now I see your point, thanks! Well, at least in theory, the driver >>> shouldn't call ether_input() if the interface isn't running. OTOH, >>> the interface shouldn't be getting traffic if it's !UP. However, >>> I suspect that not all drivers handle IFF_UP fully or even can do >>> it at all due to hardware limitations. As I understand it, in an >>> ideal world a !UP interface should be deaf and dumb and not interfering >>> in any way with the network still connected to it physically. >>> Therefore discarding inbound traffic from a !UP interface may be a >>> necessary workaround, but it may not be enough. All that boils >>> down to this: The IFF_UP check in ether_input() is more to a sanity >>> check than to the way for IFF_UP to work. Therefore we can add the >>> IFF_DRV_RUNNING sanity check there, too, for completeness. >>> >> Thanks for your explanation. >> >> I'm still not sure I understand why IFF_DRV_RUNNING should be checked >> for in ether_input(). >> >> There is a pretty clear reason for checking for IFF_UP in ether_input(); >> an interface which is configured administratively down should not be >> bringing traffic into the stack, regardless of whether it is a hardware >> device or a pseudo-device. IFF_UP has been in since 4.2BSD; it is more >> or less integral to how the BSD network stack operates. There are >> situations in which a pseudo-device or hardware device could incorrectly >> call ether_input() with such traffic. >> >> Reading , IFF_DRV_RUNNING is documented as meaning 'resources >> are allocated for this device'. Surely such a check is redundant and not >> relevant to the operation of ether_input()? As far as I can tell it is >> similar to the old meaning of IFF_RUNNING, and there are legitimate >> situations in which the hardware or its queues may have stopped >> processing temporarily whilst the interface may be administratively up >> (and thus accepting traffic). >> >> Please correct me if I'm wrong or point out situations where it's >> important IFF_DRV_RUNNING state is checked outside of a driver. Sorry if >> I seem obtuse, but I'm sure I'm missing some detail here. > > My concern is that, with possible callers of ether_input() being > not really *from* but *on behalf* of the interface, e.g., in Netgraph, > IFF_DRV_RUNNING can be a way for the interface driver to tell us: > I'm not ready yet, so don't believe anyone who pretends he has a > packet from me. > > E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is > properly attached to an Ethernet interface (known as the vlan's > parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. > Now assume that a vlan interface is UP but not RUNNING because it's > detached from the parent. If a buggy Netgraph node or another > source of synthetic traffic decides to inject a packet as though > it comes in from the said vlan interface, handling the packet as > usual will be bogus. > > IMHO the IFF_UP check in ether_input() is mostly for a similar > purpose: If all callers of ether_input() were in real and conformant > interface drivers, we shouldn't bother re-checking IFF_UP in > ether_input() either because the driver of a down interface wouldn't > call ether_input() for it in the first place. > > So I view the checks in ether_input() as a way to work around broken > drivers and simplify synthetic callers of ether_input(). In fact, > the whole first part of ether_input() is for that: It essentially > verifies the caller's conformance. I mean the checks for the proper > mbuf flags and length, recvif, etc. > > Of course, we can omit the check for IFF_DRV_RUNNING if we think > that synthetic traffic from an unready interface is OK. But I'm > afraid we shouldn't. > > In addition, I wonder if we can move the conformance checks to a > wrapper function so that conformant drivers don't have to pay the > performance penalty of the "just in case" checks per each inbound > Ethernet packet. Then make it a KASSERT() if it only catches buggy drivers. -- Andre From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 14:42:10 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 000D916A400 for ; Mon, 5 Mar 2007 14:42:09 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id AFCA313C442 for ; Mon, 5 Mar 2007 14:42:09 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id ED4431F5513; Mon, 5 Mar 2007 09:42:06 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Mon, 05 Mar 2007 09:42:06 -0500 X-Sasl-enc: AahfZaTnTBWxMINb4yqi6/m1mjzDZfbnByteGRS/3cBD 1173105721 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id F09D1236E0; Mon, 5 Mar 2007 09:42:00 -0500 (EST) Message-ID: <45EC2C37.7020604@incunabulum.net> Date: Mon, 05 Mar 2007 14:41:59 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Yar Tikhiy References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> In-Reply-To: <20070305142411.GC57253@comp.chem.msu.su> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org, Kip Macy Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 14:42:10 -0000 Hi, Thanks for your reply. Yar Tikhiy wrote: > My concern is that, with possible callers of ether_input() being > not really *from* but *on behalf* of the interface, e.g., in Netgraph, > IFF_DRV_RUNNING can be a way for the interface driver to tell us: > I'm not ready yet, so don't believe anyone who pretends he has a > packet from me. > > E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is > properly attached to an Ethernet interface (known as the vlan's > parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. > Now assume that a vlan interface is UP but not RUNNING because it's > detached from the parent. If a buggy Netgraph node or another > source of synthetic traffic decides to inject a packet as though > it comes in from the said vlan interface, handling the packet as > usual will be bogus. > > IMHO the IFF_UP check in ether_input() is mostly for a similar > purpose: If all callers of ether_input() were in real and conformant > interface drivers, we shouldn't bother re-checking IFF_UP in > ether_input() either because the driver of a down interface wouldn't > call ether_input() for it in the first place. > I agree with the point you make here about non-conforming drivers; however there are cogent performance arguments for checking IFF_UP immediately. If an interface is configured administratively down, it shouldn't be pumping traffic into the network stack. I do however realize there are situations where this can happen. Suppose, for example, the thread which calls ether_input() is scheduled on another CPU. Dropping such frames immediately on entry into ether_input() saves tying up a thread for any longer than is absolutely necessary. Perhaps Kip, who is working on 10GbE performance just now, can advise further. > > Of course, we can omit the check for IFF_DRV_RUNNING if we think > that synthetic traffic from an unready interface is OK. But I'm > afraid we shouldn't. > > In addition, I wonder if we can move the conformance checks to a > wrapper function so that conformant drivers don't have to pay the > performance penalty of the "just in case" checks per each inbound > Ethernet packet. > Thanks for explaining this further. Perhaps I should put the check for IFF_DRV_RUNNING under INVARIANTS or make it a KASSERT? The code in bms_netdev as it stands bends the rules a little. The IFF_UP check was in ether_demux() before. The original reason for the ether_input()/ether_demux() split was to accomodate Netgraph. I must admit that I hadn't fully mapped out the possible re-entry scenarios with Netgraph because they may be arbitrarily complicated by its very nature. Whilst Netgraph is a cool feature, and one I am very grateful that FreeBSD has, I wonder if it is OK that we should have checks which potentially pessimize performance for the main use cases to protect the stack against Netgraph frames which are bogons, or bugs in Netgraph nodes. I'm open to hearing more about this, but my own resources (time, money) are a limiting factor as to what I can do. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 14:56:55 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B131A16A403; Mon, 5 Mar 2007 14:56:55 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from pobox.codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id 62C2C13C467; Mon, 5 Mar 2007 14:56:55 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by pobox.codelabs.ru with esmtpsa (TLSv1:AES256-SHA:256) id 1HOEcP-000Oq8-8P; Mon, 05 Mar 2007 17:56:53 +0300 Date: Mon, 5 Mar 2007 17:56:47 +0300 From: Eygene Ryabinkin To: "Bruce M. Simpson" Message-ID: <20070305145647.GT80319@codelabs.ru> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EB4915.1090703@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <45EB4915.1090703@FreeBSD.org> Sender: rea-fbsd@codelabs.ru X-Spam-Status: No, score=-3.4 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_00 Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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 Mar 2007 14:56:55 -0000 Bruce, > >And a question: can anyone say if my patch will break some known > >good behaviour and if the current behaviour of if_bridge is based > >on some logic I am currently failing to understand. > > > I would greatly appreciate it if you could look at the combined M_PROMISC and > 802.1p patch, which rewrites ether_input() significantly. It sounds like the > issues you are having with vlans and bridges may potentially be fixed by this > patch, or that the fix may be incorporated more easily with this patch. Studied your patch as a patch, but not tried it on a live system. I feel that your patch will not help in my situation, just because my problem lies in the if_bridge.c::bridge_input() that is invoked from if_ethersubr.c as BRIDGE_INPUT() macro. I see that your patch sets some flags, tries to handle 802.1q packets, gives netgraph a chance on the packet, but still passes the packet to BRIDGE_INPUT just clearing the M_PROMISC bit. And all Bad Things in my case are done in the bridge_input. As my packets are going to the ether_input with VLAN tags stripped by hardware and the if_bridge does not care about M_PROMISC I see no theoretical difference if your patch will be applied. Sure, I can test it, but then I need to know what problems are cured by your patch, or I just should watch if it will not break something. > In NetBSD, after if_bridge is given a chance to claim an input frame, the ifp > may be changed if the bridge needs to forward locally. In my case if_bridge drops off the packet because firewall fails to recognize the packet as good: the interface that is passed to a pfil_hooks is bad (I mean not the one expected). > M_PROMISC is used to > indicate that a frame was received promiscuously, in case ether_input() > re-enters itself with the same mbuf chain. Certain consumers of ether_input() > need to punch holes in the logic used to detect if a frame was for us or not > because they do funky things with Ethernet destination addresses, e.g. carp. By the way: just grepped /sys/net and /sys/netinet on the 6-STABLE for the M_PROMISC -- no hits. Are you talking about 6-STABLE or 7-CURRENT? I have my issue on the 6-STABLE, but 7-CURRENT should also have it. Will try to see if your patch makes any difference for the 7-CURRENT, but I have no system at hand to test it, sorry. -- Eygene From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 15:29:22 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BE71B16A401; Mon, 5 Mar 2007 15:29:22 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id A51DC13C491; Mon, 5 Mar 2007 15:29:19 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l25FTEmj069630; Mon, 5 Mar 2007 18:29:14 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l25FTEn6069629; Mon, 5 Mar 2007 18:29:14 +0300 (MSK) (envelope-from yar) Date: Mon, 5 Mar 2007 18:29:14 +0300 From: Yar Tikhiy To: Andre Oppermann Message-ID: <20070305152914.GD57253@comp.chem.msu.su> References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> <45EC2AA8.8060302@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45EC2AA8.8060302@freebsd.org> User-Agent: Mutt/1.5.9i Cc: freebsd-net@freebsd.org, Bruce M Simpson Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 15:29:22 -0000 On Mon, Mar 05, 2007 at 03:35:20PM +0100, Andre Oppermann wrote: > Yar Tikhiy wrote: > >On Mon, Mar 05, 2007 at 01:40:26AM +0000, Bruce M Simpson wrote: > >>Yar Tikhiy wrote: > >>>Now I see your point, thanks! Well, at least in theory, the driver > >>>shouldn't call ether_input() if the interface isn't running. OTOH, > >>>the interface shouldn't be getting traffic if it's !UP. However, > >>>I suspect that not all drivers handle IFF_UP fully or even can do > >>>it at all due to hardware limitations. As I understand it, in an > >>>ideal world a !UP interface should be deaf and dumb and not interfering > >>>in any way with the network still connected to it physically. > >>>Therefore discarding inbound traffic from a !UP interface may be a > >>>necessary workaround, but it may not be enough. All that boils > >>>down to this: The IFF_UP check in ether_input() is more to a sanity > >>>check than to the way for IFF_UP to work. Therefore we can add the > >>>IFF_DRV_RUNNING sanity check there, too, for completeness. > >>> > >>Thanks for your explanation. > >> > >>I'm still not sure I understand why IFF_DRV_RUNNING should be checked > >>for in ether_input(). > >> > >>There is a pretty clear reason for checking for IFF_UP in ether_input(); > >>an interface which is configured administratively down should not be > >>bringing traffic into the stack, regardless of whether it is a hardware > >>device or a pseudo-device. IFF_UP has been in since 4.2BSD; it is more > >>or less integral to how the BSD network stack operates. There are > >>situations in which a pseudo-device or hardware device could incorrectly > >>call ether_input() with such traffic. > >> > >>Reading , IFF_DRV_RUNNING is documented as meaning 'resources > >>are allocated for this device'. Surely such a check is redundant and not > >>relevant to the operation of ether_input()? As far as I can tell it is > >>similar to the old meaning of IFF_RUNNING, and there are legitimate > >>situations in which the hardware or its queues may have stopped > >>processing temporarily whilst the interface may be administratively up > >>(and thus accepting traffic). > >> > >>Please correct me if I'm wrong or point out situations where it's > >>important IFF_DRV_RUNNING state is checked outside of a driver. Sorry if > >>I seem obtuse, but I'm sure I'm missing some detail here. > > > >My concern is that, with possible callers of ether_input() being > >not really *from* but *on behalf* of the interface, e.g., in Netgraph, > >IFF_DRV_RUNNING can be a way for the interface driver to tell us: > >I'm not ready yet, so don't believe anyone who pretends he has a > >packet from me. > > > >E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is > >properly attached to an Ethernet interface (known as the vlan's > >parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. > >Now assume that a vlan interface is UP but not RUNNING because it's > >detached from the parent. If a buggy Netgraph node or another > >source of synthetic traffic decides to inject a packet as though > >it comes in from the said vlan interface, handling the packet as > >usual will be bogus. > > > >IMHO the IFF_UP check in ether_input() is mostly for a similar > >purpose: If all callers of ether_input() were in real and conformant > >interface drivers, we shouldn't bother re-checking IFF_UP in > >ether_input() either because the driver of a down interface wouldn't > >call ether_input() for it in the first place. > > > >So I view the checks in ether_input() as a way to work around broken > >drivers and simplify synthetic callers of ether_input(). In fact, > >the whole first part of ether_input() is for that: It essentially > >verifies the caller's conformance. I mean the checks for the proper > >mbuf flags and length, recvif, etc. > > > >Of course, we can omit the check for IFF_DRV_RUNNING if we think > >that synthetic traffic from an unready interface is OK. But I'm > >afraid we shouldn't. > > > >In addition, I wonder if we can move the conformance checks to a > >wrapper function so that conformant drivers don't have to pay the > >performance penalty of the "just in case" checks per each inbound > >Ethernet packet. > > Then make it a KASSERT() if it only catches buggy drivers. Hmmm, KASSERT() on a network packet handling path is dangerous: if any driver proves buggy later, evil people can get a way to DoS CURRENT systems some brave folks run in production. -- Yar From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 15:48:28 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6AC2D16A401 for ; Mon, 5 Mar 2007 15:48:28 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id E274013C4B2 for ; Mon, 5 Mar 2007 15:48:26 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l25FmOnZ069877; Mon, 5 Mar 2007 18:48:24 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l25FmOWJ069876; Mon, 5 Mar 2007 18:48:24 +0300 (MSK) (envelope-from yar) Date: Mon, 5 Mar 2007 18:48:24 +0300 From: Yar Tikhiy To: Bruce M Simpson Message-ID: <20070305154824.GE57253@comp.chem.msu.su> References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> <45EC2C37.7020604@incunabulum.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45EC2C37.7020604@incunabulum.net> User-Agent: Mutt/1.5.9i Cc: freebsd-net@freebsd.org, Kip Macy Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 15:48:28 -0000 On Mon, Mar 05, 2007 at 02:41:59PM +0000, Bruce M Simpson wrote: > Hi, > > Thanks for your reply. > > Yar Tikhiy wrote: > >My concern is that, with possible callers of ether_input() being > >not really *from* but *on behalf* of the interface, e.g., in Netgraph, > >IFF_DRV_RUNNING can be a way for the interface driver to tell us: > >I'm not ready yet, so don't believe anyone who pretends he has a > >packet from me. > > > >E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is > >properly attached to an Ethernet interface (known as the vlan's > >parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. > >Now assume that a vlan interface is UP but not RUNNING because it's > >detached from the parent. If a buggy Netgraph node or another > >source of synthetic traffic decides to inject a packet as though > >it comes in from the said vlan interface, handling the packet as > >usual will be bogus. > > > >IMHO the IFF_UP check in ether_input() is mostly for a similar > >purpose: If all callers of ether_input() were in real and conformant > >interface drivers, we shouldn't bother re-checking IFF_UP in > >ether_input() either because the driver of a down interface wouldn't > >call ether_input() for it in the first place. > > > I agree with the point you make here about non-conforming drivers; > however there are cogent performance arguments for checking IFF_UP > immediately. If an interface is configured administratively down, it > shouldn't be pumping traffic into the network stack. I do however > realize there are situations where this can happen. > > Suppose, for example, the thread which calls ether_input() is scheduled > on another CPU. Dropping such frames immediately on entry into > ether_input() saves tying up a thread for any longer than is absolutely > necessary. > > Perhaps Kip, who is working on 10GbE performance just now, can advise > further. Agreed! > >Of course, we can omit the check for IFF_DRV_RUNNING if we think > >that synthetic traffic from an unready interface is OK. But I'm > >afraid we shouldn't. > > > >In addition, I wonder if we can move the conformance checks to a > >wrapper function so that conformant drivers don't have to pay the > >performance penalty of the "just in case" checks per each inbound > >Ethernet packet. > > > Thanks for explaining this further. Perhaps I should put the check for > IFF_DRV_RUNNING under INVARIANTS or make it a KASSERT? KASSERT is dangerous there, but INVARIANTS is reasonable. I can see a check under DIAGNOSTIC at the beginning of ether_input() already, that for ifp and recvif being the same. INVARIANTS is more appropriate there, so the existing check and the check for IFF_DRV_RUNNING can be but in the same "#ifdef INVARIANTS" block. But I'm not urging you to do that, I can do it by myself later, so that it won't interfere with your current work. > The code in bms_netdev as it stands bends the rules a little. The IFF_UP > check was in ether_demux() before. The original reason for the > ether_input()/ether_demux() split was to accomodate Netgraph. I must > admit that I hadn't fully mapped out the possible re-entry scenarios > with Netgraph because they may be arbitrarily complicated by its very > nature. > > Whilst Netgraph is a cool feature, and one I am very grateful that > FreeBSD has, I wonder if it is OK that we should have checks which > potentially pessimize performance for the main use cases to protect the > stack against Netgraph frames which are bogons, or bugs in Netgraph nodes. I'd rather not limit our view to Netgraph. In today's hairy network setups the need for synthetic traffic (i.e., that not coming directly from a physical device) pops up here and there. > I'm open to hearing more about this, but my own resources (time, money) > are a limiting factor as to what I can do. Come on, Bruce, I'm not trying to put additional burden on you. I myself like to hack our network stack when I have good ideas and a bit of time. What we actually trying to do here is to define some basic properties of modern network interfaces as software entities. Nowadays our system is large and complex, and we seem to have a bit too much "just in case" checks in some places and not enough important checks in other places. My proposed check for IFF_DRV_RUNNING is by no means a priority task. I can add it by myself after you finish your great current project regarding ether_input() and friends. I'm going to have a closer look at bms_netdev in the nearest time. -- Yar From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 16:02:10 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1B4E816A400; Mon, 5 Mar 2007 16:02:10 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id C78A913C48D; Mon, 5 Mar 2007 16:02:09 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 6F8C81F5C83; Mon, 5 Mar 2007 11:02:09 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Mon, 05 Mar 2007 11:02:09 -0500 X-Sasl-enc: eG49zWuCENynFxREc+lJL2xNVGvP9HcUwm4uGQ3cWwun 1173110529 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id A99E023F80; Mon, 5 Mar 2007 11:02:07 -0500 (EST) Message-ID: <45EC3EFD.3000301@FreeBSD.org> Date: Mon, 05 Mar 2007 16:02:05 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Eygene Ryabinkin References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EB4915.1090703@FreeBSD.org> <20070305145647.GT80319@codelabs.ru> In-Reply-To: <20070305145647.GT80319@codelabs.ru> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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 Mar 2007 16:02:10 -0000 Hi, Eygene Ryabinkin wrote: > Sure, I can test it, but then I need to know what problems are cured > by your patch, or I just should watch if it will not break something. > > My concern is that I want to make sure that all these changes to the ether_input path work OK together. The M_PROMISC flag is set further down when it's determined that a frame flowing into ether_input() was received promiscuously, and therefore Layer 3 protocols (e.g. IP) may not want to see it. >> In NetBSD, after if_bridge is given a chance to claim an input frame, the ifp >> may be changed if the bridge needs to forward locally. >> > > In my case if_bridge drops off the packet because firewall fails to > recognize the packet as good: the interface that is passed to a > pfil_hooks is bad (I mean not the one expected). > The ifp which your patch changes is that of the mbuf chain when bridge_input determines it is not for the bridge, but should be forwarded locally. The patch forces a locally forwarded frame to have the same ifp as it had when it came into bridge_input. I can foresee problems if the same Ethernet destination address exists on multiple bridge member interfaces. The latest version of p4 bms_netdev now updates the cached ifp in ether_input() if bridge_input() changed it in this way. NetBSD consistently uses pfil_hooks for the if_bridge *and* ether_input paths, FreeBSD currently calls ipfw directly for ether_input, which may make a difference to the behaviour which you are seeing with VLANs. Not understanding if_bridge fully, or the coupling of ipfw with if_ethersubr.c, I would hope that Andrew and others have more to say on this. > Will try to see if your patch makes any difference for the 7-CURRENT, > but I have no system at hand to test it, sorry. > The patch is extracted from p4 therefore it should apply against CURRENT. I haven't updated the patch yet, the latest code is in p4. We won't be able to eliminate the DEV_CARP checks in this spin. I did exchange an idea with Andrew late last night whereby a list of addresses other than ether_dhost is maintained for each ifnet. Input paths then check this in addition to or instead of ether_dhost. I've added this to the Wiki. I've been working particularly hard lately so I'm not 100% clear. Thanks, BMS From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 16:42:47 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2F12016A40D for ; Mon, 5 Mar 2007 16:42:47 +0000 (UTC) (envelope-from adityaa.kiran@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.228]) by mx1.freebsd.org (Postfix) with ESMTP id E361713C4BC for ; Mon, 5 Mar 2007 16:42:46 +0000 (UTC) (envelope-from adityaa.kiran@gmail.com) Received: by wr-out-0506.google.com with SMTP id 55so2388223wri for ; Mon, 05 Mar 2007 08:42:46 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; b=M0wprb4I3NQkZVQHJ+HPq17oMI0PzGrFK5KwK4z7MiIpx0j7b1/9SEMbCSlV9ADsiiakaSs6z0gJfcP6D/Auwr7PC+WXVPGIkATq1nqqNfN6ggmXDfyn1Mv1b12X3HjbhcpVwY2CeHXNBb4cbkFXyL9Aet+3jRVwA2gW2kvlMDA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=pzxcszdrME6p28Zure0PW5EzI6DVwyYAz3empaPUOWwhrgZOaXf+6XswH46pau3sg7nPbhxnsZa53yA34zCE/iE4aMa/PRL+r2cOTi51PSDF1/qaAe1j95vgdROBX7kJ2amUvRp32gT8pVBZ53tVvq1p0zNUkErra8yKJsFsolA= Received: by 10.114.200.2 with SMTP id x2mr1347854waf.1173112965479; Mon, 05 Mar 2007 08:42:45 -0800 (PST) Received: by 10.114.145.9 with HTTP; Mon, 5 Mar 2007 08:42:45 -0800 (PST) Message-ID: <994cd1cf0703050842r5e54daa6y5fe6af3083e15cd@mail.gmail.com> Date: Mon, 5 Mar 2007 22:12:45 +0530 From: "aditya kiran" To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: PMTU Discovery support 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 Mar 2007 16:42:47 -0000 Hi, I'm just trying to understand the PMTU Discovery support in FreeBSD. Is upward PMTU (increase in PMTU) is also discovered when PMTU Discovery is enabled? Thanks, Aditya From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 18:23:16 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0499C16A402; Mon, 5 Mar 2007 18:23:16 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id CA40013C4A6; Mon, 5 Mar 2007 18:23:15 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l25IN8c9009002 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 13:23:08 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l25IMsrj056048; Mon, 5 Mar 2007 13:22:54 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17900.24574.751134.397740@grasshopper.cs.duke.edu> Date: Mon, 5 Mar 2007 13:22:54 -0500 (EST) To: Andre Oppermann In-Reply-To: <45E8276D.60105@freebsd.org> References: <45E8276D.60105@freebsd.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: freebsd-net@freebsd.org, freebsd-current@freebsd.org, rwatson@freebsd.org, kmacy@freebsd.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 18:23:16 -0000 Andre Oppermann writes: > The patch is here: > > http://people.freebsd.org/~andre/soreceive_stream-20070302.diff > > Any testing, especially on 10Gig cards, and feedback appreciated. I just tested with my standard mxge setup (details and data below). This is *awesome*. Before your patch, the peak bandwidth was 7.5Gb/s with jumbo frames, and 2.47Gb/s with standard frames. After the patch, it is 9.0Gb/s and 2.92Gb/s. Before the patch, the bandwidth "collapses" above a certain receive socket buffer size. Eg, it is 7.5Gb/s with a 128KB socket buffer, but 6.2Gb/s with 192KB or more. Now the peak is with a 192KB socket buffer, and there is no sudden collapse above the peak! With the patch, we finally seem to be performance competative on the receive side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of those OSes do much better (saturate the link with jumbos) when CPU affinity is used to bind the interrupt handler and netserver process to different cores on the same socket. I imagine FreeBSD may be able to do even better if it ever grows CPU affinity support for both interrupt handlers and processes. With the patch, it performs at least as well, if not better than, Solaris and Linux do without CPU affinity. Venice: AMD Athlon(tm) 64 Processor 3000+, 1.8GHz, 512KB L2 Venice: Linux 2.6.19, UP Rome: AMD Athlon(tm) 64 X2 Dual Core Processor 3800+, 2.0GHz, 512KB L2 Rome: -current, SMP Motherboard (both machines): DFI Corp, LP NF4 Series Chipset (both machines): Nvidia CK804 NIC (both machines): Myri 10G-PCIE-8A-C (CX4) The tests were run from venice -> rome using netperf242 -Hrome-my -tTCP_SENDFILE -F /boot/vmlinuz-2.6.9-11.EL -C -c -- -S $SOCKETBUFFER_SIZE I took the median of 5 runs at each socket buffer size. I really need to write some scripts.. MTU 1500 Pre: 65536 65536 65536 10.00 2472.08 31.83 90.38 1.055 5.990 98304 65536 65536 10.00 2280.62 29.61 85.77 1.064 6.162 131072 65536 65536 10.00 2190.13 28.23 84.67 1.056 6.334 196608 65536 65536 10.01 2111.03 23.75 81.54 0.921 6.328 262144 65536 65536 10.01 1843.48 15.87 73.46 0.705 6.529 524288 65536 65536 10.01 1808.00 17.28 76.54 0.783 6.936 1048576 65536 65536 10.01 1919.01 15.72 81.54 0.671 6.962 Post: 65536 65536 65536 10.00 2839.09 37.42 86.92 1.080 5.016 98304 65536 65536 10.00 2923.07 36.42 86.92 1.021 4.872 131072 65536 65536 10.01 2694.91 30.74 86.92 0.934 5.285 196608 65536 65536 10.00 2640.54 27.62 86.15 0.857 5.346 262144 65536 65536 10.00 2422.32 22.23 82.69 0.752 5.593 524288 65536 65536 10.01 2168.59 16.96 80.77 0.641 6.102 1048576 65536 65536 10.01 2138.10 16.39 85.77 0.628 6.572 MTU 9000 Pre: 65536 65536 65536 10.00 4908.35 34.61 52.31 0.578 1.746 98304 65536 65536 10.00 6623.84 44.71 68.46 0.553 1.693 131072 65536 65536 10.00 7504.46 41.83 77.69 0.457 1.696 196608 65536 65536 10.00 6248.29 36.91 77.69 0.484 2.037 262144 65536 65536 10.00 6230.94 35.51 76.92 0.467 2.023 524288 65536 65536 10.00 6242.76 36.03 80.38 0.473 2.110 1048576 65536 65536 10.00 6162.54 37.03 74.62 0.492 1.984 Post: 65536 65536 65536 10.00 4957.98 36.72 49.62 0.607 1.640 98304 65536 65536 10.00 6799.78 44.61 68.08 0.537 1.640 131072 65536 65536 10.00 7998.88 46.92 73.08 0.481 1.497 196608 65536 65536 10.00 9017.95 48.92 82.69 0.444 1.502 262144 65536 65536 10.00 8874.62 49.52 81.15 0.457 1.498 524288 65536 65536 10.00 8787.09 48.12 81.92 0.449 1.527 1048576 65536 65536 10.00 8631.88 46.02 82.31 0.437 1.562 Drew PS: It didn't want to compile at first. I needed to comment out the offending 2 lines: cc -c -O2 -frename-registers -pipe -fno-strict-aliasing -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -fformat-extensions -nostdinc -I- -I. -I../../.. -I../../../contrib/altq -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -Werror ../../../kern/uipc_sockbuf.c ../../../kern/uipc_sockbuf.c: In function `sbpull_locked': ../../../kern/uipc_sockbuf.c:841: error: structure has no member named `sb_sndptroff' ../../../kern/uipc_sockbuf.c:842: error: structure has no member named `sb_sndptroff' *** Error code 1 Stop in /usr/var/tmp/sys/amd64/compile/ROME. From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 18:29:57 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 460AA16A401; Mon, 5 Mar 2007 18:29:57 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.freebsd.org (Postfix) with ESMTP id 05F3E13C467; Mon, 5 Mar 2007 18:29:56 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id 4692E46D91; Mon, 5 Mar 2007 13:29:56 -0500 (EST) Date: Mon, 5 Mar 2007 18:29:56 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Andrew Gallatin In-Reply-To: <17900.24574.751134.397740@grasshopper.cs.duke.edu> Message-ID: <20070305182755.S31701@fledge.watson.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-net@freebsd.org, freebsd-current@freebsd.org, Andre Oppermann , kmacy@freebsd.org, jhb@FreeBSD.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 18:29:57 -0000 On Mon, 5 Mar 2007, Andrew Gallatin wrote: > With the patch, we finally seem to be performance competative on the receive > side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of > those OSes do much better (saturate the link with jumbos) when CPU affinity > is used to bind the interrupt handler and netserver process to different > cores on the same socket. I imagine FreeBSD may be able to do even better > if it ever grows CPU affinity support for both interrupt handlers and > processes. With the patch, it performs at least as well, if not better > than, Solaris and Linux do without CPU affinity. I don't have numbers in front of me, and am currently packing for a trip to Tokyo so won't find them before traveling, but my experience has been that binding the ithread to a specific CPU is very helpful in improving receive performance. You can slap a sched_bind(0) into the interrupt handler the first time it runs and it should stick appropriately, and add a sysctl to sched_bind() for a user process as a hack to test it out. John has a patch that pins interrupt threads, etc, not sure what the status of that is. CC'd. Robert N M Watson Computer Laboratory University of Cambridge > > Venice: AMD Athlon(tm) 64 Processor 3000+, 1.8GHz, 512KB L2 > Venice: Linux 2.6.19, UP > Rome: AMD Athlon(tm) 64 X2 Dual Core Processor 3800+, 2.0GHz, 512KB L2 > Rome: -current, SMP > Motherboard (both machines): DFI Corp, LP NF4 Series > Chipset (both machines): Nvidia CK804 > NIC (both machines): Myri 10G-PCIE-8A-C (CX4) > > The tests were run from venice -> rome using netperf242 -Hrome-my > -tTCP_SENDFILE -F /boot/vmlinuz-2.6.9-11.EL -C -c -- -S > $SOCKETBUFFER_SIZE > > I took the median of 5 runs at each socket buffer size. > I really need to write some scripts.. > > MTU 1500 > Pre: > 65536 65536 65536 10.00 2472.08 31.83 90.38 1.055 5.990 > 98304 65536 65536 10.00 2280.62 29.61 85.77 1.064 6.162 > 131072 65536 65536 10.00 2190.13 28.23 84.67 1.056 6.334 > 196608 65536 65536 10.01 2111.03 23.75 81.54 0.921 6.328 > 262144 65536 65536 10.01 1843.48 15.87 73.46 0.705 6.529 > 524288 65536 65536 10.01 1808.00 17.28 76.54 0.783 6.936 > 1048576 65536 65536 10.01 1919.01 15.72 81.54 0.671 6.962 > > > Post: > 65536 65536 65536 10.00 2839.09 37.42 86.92 1.080 5.016 > 98304 65536 65536 10.00 2923.07 36.42 86.92 1.021 4.872 > 131072 65536 65536 10.01 2694.91 30.74 86.92 0.934 5.285 > 196608 65536 65536 10.00 2640.54 27.62 86.15 0.857 5.346 > 262144 65536 65536 10.00 2422.32 22.23 82.69 0.752 5.593 > 524288 65536 65536 10.01 2168.59 16.96 80.77 0.641 6.102 > 1048576 65536 65536 10.01 2138.10 16.39 85.77 0.628 6.572 > > > MTU 9000 > Pre: > 65536 65536 65536 10.00 4908.35 34.61 52.31 0.578 1.746 > 98304 65536 65536 10.00 6623.84 44.71 68.46 0.553 1.693 > 131072 65536 65536 10.00 7504.46 41.83 77.69 0.457 1.696 > 196608 65536 65536 10.00 6248.29 36.91 77.69 0.484 2.037 > 262144 65536 65536 10.00 6230.94 35.51 76.92 0.467 2.023 > 524288 65536 65536 10.00 6242.76 36.03 80.38 0.473 2.110 > 1048576 65536 65536 10.00 6162.54 37.03 74.62 0.492 1.984 > > > Post: > 65536 65536 65536 10.00 4957.98 36.72 49.62 0.607 1.640 > 98304 65536 65536 10.00 6799.78 44.61 68.08 0.537 1.640 > 131072 65536 65536 10.00 7998.88 46.92 73.08 0.481 1.497 > 196608 65536 65536 10.00 9017.95 48.92 82.69 0.444 1.502 > 262144 65536 65536 10.00 8874.62 49.52 81.15 0.457 1.498 > 524288 65536 65536 10.00 8787.09 48.12 81.92 0.449 1.527 > 1048576 65536 65536 10.00 8631.88 46.02 82.31 0.437 1.562 > > > Drew > > > PS: It didn't want to compile at first. I needed to comment out > the offending 2 lines: > > cc -c -O2 -frename-registers -pipe -fno-strict-aliasing -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -fformat-extensions -nostdinc -I- -I. -I../../.. -I../../../contrib/altq -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -Werror ../../../kern/uipc_sockbuf.c > ../../../kern/uipc_sockbuf.c: In function `sbpull_locked': > ../../../kern/uipc_sockbuf.c:841: error: structure has no member named `sb_sndptroff' > ../../../kern/uipc_sockbuf.c:842: error: structure has no member named `sb_sndptroff' > *** Error code 1 > > Stop in /usr/var/tmp/sys/amd64/compile/ROME. > > From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 18:48:58 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 00F2716A404; Mon, 5 Mar 2007 18:48:57 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id B401213C4B3; Mon, 5 Mar 2007 18:48:57 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l25Imvt6016866 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 13:48:57 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l25ImpG3056078; Mon, 5 Mar 2007 13:48:51 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17900.26131.918618.853907@grasshopper.cs.duke.edu> Date: Mon, 5 Mar 2007 13:48:51 -0500 (EST) To: Robert Watson In-Reply-To: <20070305182755.S31701@fledge.watson.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: freebsd-net@FreeBSD.org, freebsd-current@FreeBSD.org, Andre Oppermann , kmacy@FreeBSD.org, jhb@FreeBSD.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 18:48:58 -0000 Robert Watson writes: > On Mon, 5 Mar 2007, Andrew Gallatin wrote: > > > With the patch, we finally seem to be performance competative on the receive > > side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of > > those OSes do much better (saturate the link with jumbos) when CPU affinity > > is used to bind the interrupt handler and netserver process to different > > cores on the same socket. I imagine FreeBSD may be able to do even better > > if it ever grows CPU affinity support for both interrupt handlers and > > processes. With the patch, it performs at least as well, if not better > > than, Solaris and Linux do without CPU affinity. > > I don't have numbers in front of me, and am currently packing for a trip to > Tokyo so won't find them before traveling, but my experience has been that > binding the ithread to a specific CPU is very helpful in improving receive > performance. You can slap a sched_bind(0) into the interrupt handler the > first time it runs and it should stick appropriately, and add a sysctl to > sched_bind() for a user process as a hack to test it out. You lost me at adding the sysctl for the user process.. Does FreeBSD have, or plan to have, an interface to bind threads to CPUs? > > John has a patch that pins interrupt threads, etc, not sure what the status of > that is. CC'd. He wanted me to test it and I dropped the ball. By the time I got a chance (some months later), it was so stale it did not come close to applying. I've asked him to regen. Drew From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 19:00:20 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ACAB016A409; Mon, 5 Mar 2007 19:00:20 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.freebsd.org (Postfix) with ESMTP id E7ADE13C4BA; Mon, 5 Mar 2007 19:00:17 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id 67F8746D25; Mon, 5 Mar 2007 14:00:16 -0500 (EST) Date: Mon, 5 Mar 2007 19:00:16 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Andrew Gallatin In-Reply-To: <17900.26131.918618.853907@grasshopper.cs.duke.edu> Message-ID: <20070305185650.S31701@fledge.watson.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> <17900.26131.918618.853907@grasshopper.cs.duke.edu> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-net@FreeBSD.org, freebsd-current@FreeBSD.org, Andre Oppermann , kmacy@FreeBSD.org, jhb@FreeBSD.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 19:00:20 -0000 On Mon, 5 Mar 2007, Andrew Gallatin wrote: > Robert Watson writes: > > On Mon, 5 Mar 2007, Andrew Gallatin wrote: > > > > > With the patch, we finally seem to be performance competative on the receive > > > side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of > > > those OSes do much better (saturate the link with jumbos) when CPU affinity > > > is used to bind the interrupt handler and netserver process to different > > > cores on the same socket. I imagine FreeBSD may be able to do even better > > > if it ever grows CPU affinity support for both interrupt handlers and > > > processes. With the patch, it performs at least as well, if not better > > > than, Solaris and Linux do without CPU affinity. > > > > I don't have numbers in front of me, and am currently packing for a trip > > to Tokyo so won't find them before traveling, but my experience has been > > that binding the ithread to a specific CPU is very helpful in improving > > receive performance. You can slap a sched_bind(0) into the interrupt > > handler the first time it runs and it should stick appropriately, and add > > a sysctl to sched_bind() for a user process as a hack to test it out. > > You lost me at adding the sysctl for the user process.. Does FreeBSD have, > or plan to have, an interface to bind threads to CPUs? Right now we have a facility to bind kernel threads to specific CPUs (sched_bind(9)), but not an API or mature facility to bind user threads (accept in as much as the scheduling of the user thread reflects the scheduling of the kernel thread, which works but requires adding a system call or sysctl as a hack). There was a recent discussion on arch@ about the relative merits of various such user APIs floating around. Adding a basic model for user thread CPU binding would be fairly easy, but I'm not sure anyone owns the task currently. The quick hack model for testing is to sched_bind() the user thread using a sysctl added for testing purposes, which I believe should work to demonstrate the general point, and can be done in about 15 minutes. Since I'm running out the door now, it will have to be someone else's 15 minutes. :-) Robert N M Watson Computer Laboratory University of Cambridge From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 19:13:02 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2462616A401; Mon, 5 Mar 2007 19:13:02 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from server.baldwin.cx (66-23-211-162.clients.speedfactory.net [66.23.211.162]) by mx1.freebsd.org (Postfix) with ESMTP id 959A513C481; Mon, 5 Mar 2007 19:13:01 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from localhost.corp.yahoo.com (john@localhost [127.0.0.1]) (authenticated bits=0) by server.baldwin.cx (8.13.8/8.13.8) with ESMTP id l25Iq9AE003961; Mon, 5 Mar 2007 13:52:10 -0500 (EST) (envelope-from jhb@freebsd.org) From: John Baldwin To: Robert Watson Date: Mon, 5 Mar 2007 13:52:28 -0500 User-Agent: KMail/1.9.1 References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> In-Reply-To: <20070305182755.S31701@fledge.watson.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703051352.29939.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-2.0.2 (server.baldwin.cx [127.0.0.1]); Mon, 05 Mar 2007 13:52:10 -0500 (EST) X-Virus-Scanned: ClamAV 0.88.3/2735/Mon Mar 5 10:23:59 2007 on server.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=4.2 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.1.3 X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on server.baldwin.cx Cc: freebsd-net@freebsd.org, freebsd-current@freebsd.org, Andre Oppermann , Andrew Gallatin , kmacy@freebsd.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 19:13:02 -0000 On Monday 05 March 2007 13:29, Robert Watson wrote: > On Mon, 5 Mar 2007, Andrew Gallatin wrote: > > > With the patch, we finally seem to be performance competative on the receive > > side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of > > those OSes do much better (saturate the link with jumbos) when CPU affinity > > is used to bind the interrupt handler and netserver process to different > > cores on the same socket. I imagine FreeBSD may be able to do even better > > if it ever grows CPU affinity support for both interrupt handlers and > > processes. With the patch, it performs at least as well, if not better > > than, Solaris and Linux do without CPU affinity. > > I don't have numbers in front of me, and am currently packing for a trip to > Tokyo so won't find them before traveling, but my experience has been that > binding the ithread to a specific CPU is very helpful in improving receive > performance. You can slap a sched_bind(0) into the interrupt handler the > first time it runs and it should stick appropriately, and add a sysctl to > sched_bind() for a user process as a hack to test it out. > > John has a patch that pins interrupt threads, etc, not sure what the status of > that is. CC'd. Tested and around for over a year. Sent to people several times but no benchmarking has resulted. It lives in p4 in //depot/user/jhb/intr/... I've just regenerated the patch at http://www.FreeBSD.org/~jhb/patches/intr_bind.patch (same URL as the last N times I've posted it). I do now have access again to the sources for a simple intr_bind userland tool that lets you move assign the CPU for a given interrupt. There is currently no way to see which CPU an interrupt is assigned to outside of 'show intr' in ddb or scraping a verbose dmesg, but that can always be added later. What is there now is probably sufficient for testing. -- John Baldwin From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 19:41:59 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D9A8316A403; Mon, 5 Mar 2007 19:41:59 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id 9AD6A13C4A3; Mon, 5 Mar 2007 19:41:59 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l25Jfvlf000933 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 14:41:57 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l25JfqR9056128; Mon, 5 Mar 2007 14:41:52 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17900.29312.198932.502783@grasshopper.cs.duke.edu> Date: Mon, 5 Mar 2007 14:41:52 -0500 (EST) To: Robert Watson In-Reply-To: <20070305182755.S31701@fledge.watson.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: freebsd-net@FreeBSD.org, freebsd-current@FreeBSD.org, Andre Oppermann , kmacy@FreeBSD.org, jhb@FreeBSD.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 19:42:00 -0000 Robert Watson writes: > On Mon, 5 Mar 2007, Andrew Gallatin wrote: > > > With the patch, we finally seem to be performance competative on the receive > > side with Linux x86_64 and Solaris/amd64 on this same hardware. Both of > > those OSes do much better (saturate the link with jumbos) when CPU affinity > > is used to bind the interrupt handler and netserver process to different > > cores on the same socket. I imagine FreeBSD may be able to do even better > > if it ever grows CPU affinity support for both interrupt handlers and > > processes. With the patch, it performs at least as well, if not better > > than, Solaris and Linux do without CPU affinity. > > I don't have numbers in front of me, and am currently packing for a trip to > Tokyo so won't find them before traveling, but my experience has been that > binding the ithread to a specific CPU is very helpful in improving receive > performance. You can slap a sched_bind(0) into the interrupt handler the > first time it runs and it should stick appropriately, and add a sysctl to > sched_bind() for a user process as a hack to test it out. OK, So I did a hack which binds anything which calls accept() to CPU1, and then hacked the intr handler of my driver to bind it to CPU0. I saw no improvement. Darn. BTW, doing binding like this seems to entirely eliminate the out-of-order packets I see when net.isr.direct=0. Drew From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 19:49:57 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8780516A421 for ; Mon, 5 Mar 2007 19:49:57 +0000 (UTC) (envelope-from tom@tomjudge.com) Received: from smtp812.mail.ird.yahoo.com (smtp812.mail.ird.yahoo.com [217.146.188.72]) by mx1.freebsd.org (Postfix) with SMTP id B7E8413C4B7 for ; Mon, 5 Mar 2007 19:49:56 +0000 (UTC) (envelope-from tom@tomjudge.com) Received: (qmail 51407 invoked from network); 5 Mar 2007 19:23:14 -0000 Received: from unknown (HELO ?192.168.1.2?) (thomasjudge@btinternet.com@81.157.42.3 with plain) by smtp812.mail.ird.yahoo.com with SMTP; 5 Mar 2007 19:23:14 -0000 X-YMail-OSG: QE9iVDQVM1nT1TNF5KqhqVDE0a6PE3zoLYb5_HEXGDw9nhP7RxZat52fG3Sfbw3an3bNjtW9D7cMpeg5Nr8o_BhMTB1AQ2_RGP3AbVr7aGW1tCk7Z7E- Message-ID: <45EC6E88.3080101@tomjudge.com> Date: Mon, 05 Mar 2007 19:24:56 +0000 From: Tom Judge User-Agent: Thunderbird 1.5.0.9 (X11/20070104) MIME-Version: 1.0 To: aditya kiran References: <994cd1cf0703050842r5e54daa6y5fe6af3083e15cd@mail.gmail.com> In-Reply-To: <994cd1cf0703050842r5e54daa6y5fe6af3083e15cd@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: PMTU Discovery support 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 Mar 2007 19:49:57 -0000 aditya kiran wrote: > Hi, > I'm just trying to understand the PMTU Discovery support > in FreeBSD. Is upward PMTU (increase in PMTU) is also > discovered when PMTU Discovery is enabled? > Thanks, > Aditya As I understand it, it is not possible to detect upward changes in the path MTU as there is no mechanism for a router to generate an error when a packet is small enough to be accommodated by the MTU of the link to the next hop. I may be wrong though. Tom From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 19:58:45 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5B1C516A401; Mon, 5 Mar 2007 19:58:45 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id 1BF6113C428; Mon, 5 Mar 2007 19:58:45 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l25JwiEx005532 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 14:58:44 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l25JwdXR056142; Mon, 5 Mar 2007 14:58:39 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17900.30319.384789.754149@grasshopper.cs.duke.edu> Date: Mon, 5 Mar 2007 14:58:39 -0500 (EST) To: Robert Watson In-Reply-To: <20070305182755.S31701@fledge.watson.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: freebsd-net@FreeBSD.org, freebsd-current@FreeBSD.org, Andre Oppermann , kmacy@FreeBSD.org, jhb@FreeBSD.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 19:58:45 -0000 One last note.. It looks like SCHED_4BSD does a decent job (on my setup) w/o CPU binding, but SCHED_ULE requires CPU binding to get good performance. W/o CPU binding, the best bandwidth I see using SCHED_ULE is around 5.3Gb/s with one CPU mostly idle.. With CPU binding, it is roughly 9Gb/s. Drew From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 20:34:23 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BBD6A16A400 for ; Mon, 5 Mar 2007 20:34:23 +0000 (UTC) (envelope-from lyndon@orthanc.ca) Received: from orthanc.ca (orthanc.ca [209.89.70.53]) by mx1.freebsd.org (Postfix) with ESMTP id 4263013C47E for ; Mon, 5 Mar 2007 20:34:23 +0000 (UTC) (envelope-from lyndon@orthanc.ca) Received: from localhost (localhost [127.0.0.1]) (authenticated bits=0) by orthanc.ca (8.13.4/8.13.4) with ESMTP id l25JvV1h038811 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 12:57:31 -0700 (MST) (envelope-from lyndon@orthanc.ca) Date: Mon, 5 Mar 2007 11:57:31 -0800 (PST) From: Lyndon Nerenberg To: Tom Judge In-Reply-To: <45EC6E88.3080101@tomjudge.com> Message-ID: <20070305115615.W38684@orthanc.ca> References: <994cd1cf0703050842r5e54daa6y5fe6af3083e15cd@mail.gmail.com> <45EC6E88.3080101@tomjudge.com> Organization: The Frobozz Magic Homing Pigeon Company MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.1.7 X-Spam-Checker-Version: SpamAssassin 3.1.7 (2006-10-05) on orthanc.ca Cc: freebsd-net@freebsd.org, aditya kiran Subject: Re: PMTU Discovery support 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 Mar 2007 20:34:23 -0000 > As I understand it, it is not possible to detect upward changes in the path > MTU as there is no mechanism for a router to generate an error when a packet > is small enough to be accommodated by the MTU of the link to the next hop. I > may be wrong though. RFC1191 section 6.3. http://www.ietf.org/rfc/rfc1191.txt --lyndon From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 20:44:00 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 588FC16A400; Mon, 5 Mar 2007 20:44:00 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id 1861113C474; Mon, 5 Mar 2007 20:44:00 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.14.0/8.14.0) with ESMTP id l25Khtf4019410 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 5 Mar 2007 15:43:55 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.12.9p2/8.12.9/Submit) id l25KhonE056215; Mon, 5 Mar 2007 15:43:50 -0500 (EST) (envelope-from gallatin) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17900.33030.751272.890853@grasshopper.cs.duke.edu> Date: Mon, 5 Mar 2007 15:43:50 -0500 (EST) To: John Baldwin In-Reply-To: <200703051352.29939.jhb@freebsd.org> References: <45E8276D.60105@freebsd.org> <17900.24574.751134.397740@grasshopper.cs.duke.edu> <20070305182755.S31701@fledge.watson.org> <200703051352.29939.jhb@freebsd.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Cc: Andre Oppermann , Andrew Gallatin , freebsd-net@freebsd.org, freebsd-current@freebsd.org, Robert Watson , kmacy@freebsd.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 20:44:00 -0000 John Baldwin writes: > > John has a patch that pins interrupt threads, etc, not sure what the status > of > > that is. CC'd. > > Tested and around for over a year. Sent to people several times but no > benchmarking has resulted. It lives in p4 in //depot/user/jhb/intr/... > > I've just regenerated the patch at > http://www.FreeBSD.org/~jhb/patches/intr_bind.patch (same URL as the last N It seems very useful, in conjunction with some sort of CPU binding API. With ULE, and netserver bound via a hack to CPU 1, I can nearly double the bandwidth by binding my ithread to the opposite CPU using your patch. BTW, you need a little sanity checking somehere in the API I tried to remove binding, and guessed at binding to -1 rather than reading the source. That resulted in this panic: # ./ibind/ibind 256 -1 kernel trap 12 with interrupts disabled Fatal trap 12: page fault while in kernel mode cpuid = 1; apic id = 01 fault virtual address = 0x3806778bc fault code = supervisor read data, page not present instruction pointer = 0x8:0xffffffff8040a509 stack pointer = 0x10:0xffffffff91e88ad0 frame pointer = 0x10:0xffffffff91e88b00 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = resume, IOPL = 0 current process = 788 (ibind) [thread pid 788 tid 100047 ] Stopped at intr_bind+0xe9: movl cpu_apic_ids(,%rdi,4),%esi db> bt Tracing pid 788 tid 100047 td 0xffffff001ea1b840 intr_bind() at intr_bind+0xe9 sysarch() at sysarch+0x14a ia32_syscall() at ia32_syscall+0x236 Xint0x80_syscall() at Xint0x80_syscall+0x60 Thanks again! Drew From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 20:58:15 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4D30C16A400 for ; Mon, 5 Mar 2007 20:58:15 +0000 (UTC) (envelope-from tarkhil@webmail.sub.ru) Received: from mail.sub.ru (mail.sub.ru [88.212.205.2]) by mx1.freebsd.org (Postfix) with SMTP id 72D0713C49D for ; Mon, 5 Mar 2007 20:58:14 +0000 (UTC) (envelope-from tarkhil@webmail.sub.ru) Received: (qmail 4581 invoked by uid 0); 6 Mar 2007 00:02:57 +0300 Received: from unknown (HELO ?85.192.19.9?) (tarkhil%sub.ru@85.192.19.9) by techno.sub.ru with SMTP; 5 Mar 2007 21:02:57 -0000 Message-ID: <45EC8461.1040804@webmail.sub.ru> Date: Mon, 05 Mar 2007 23:58:09 +0300 From: Alex Povolotsky User-Agent: Thunderbird 1.5.0.9 (X11/20070104) MIME-Version: 1.0 To: Alexander Motin References: <1172056982.00691952.1172043601@10.7.7.3> <45DC2FC1.3030408@alkar.net> <45DC3718.7010804@webmail.sub.ru> <45DC39BC.5020707@alkar.net> <45DC44AF.30005@webmail.sub.ru> <45DC4640.8030309@alkar.net> <45DDBBB3.3020900@webmail.sub.ru> <45DDC091.3060903@alkar.net> <45DDC852.9060503@webmail.sub.ru> <45DDCFC1.5030608@alkar.net> In-Reply-To: <45DDCFC1.5030608@alkar.net> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: mpd success stories, anyone? 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 Mar 2007 20:58:15 -0000 Alexander Motin wrote: > Alex Povolotsky wrote: >> After disabling windowing and setting net.graph's, mpd4 refuses to work >> and no ng interfaces ever created >> >> lowering both tunables to 128000 solved the problem, will look more. > > Oops! I have missed > kern.ipc.maxsockbuf=1048576 > , which is required before those two tunes. > > But as I have said that options is not required for mpd itself. It's > just usefull for 'ngctl list' command. > Nothing helped after all. Freezes. Alex. From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 21:27:21 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2392216A402; Mon, 5 Mar 2007 21:27:21 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from server.baldwin.cx (66-23-211-162.clients.speedfactory.net [66.23.211.162]) by mx1.freebsd.org (Postfix) with ESMTP id 9850B13C428; Mon, 5 Mar 2007 21:27:20 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from localhost.corp.yahoo.com (john@localhost [127.0.0.1]) (authenticated bits=0) by server.baldwin.cx (8.13.8/8.13.8) with ESMTP id l25LREHq004906; Mon, 5 Mar 2007 16:27:17 -0500 (EST) (envelope-from jhb@freebsd.org) From: John Baldwin To: Andrew Gallatin Date: Mon, 5 Mar 2007 16:27:36 -0500 User-Agent: KMail/1.9.1 References: <45E8276D.60105@freebsd.org> <200703051352.29939.jhb@freebsd.org> <17900.33030.751272.890853@grasshopper.cs.duke.edu> In-Reply-To: <17900.33030.751272.890853@grasshopper.cs.duke.edu> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703051627.37320.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-2.0.2 (server.baldwin.cx [127.0.0.1]); Mon, 05 Mar 2007 16:27:17 -0500 (EST) X-Virus-Scanned: ClamAV 0.88.3/2736/Mon Mar 5 13:55:43 2007 on server.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=4.2 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.1.3 X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on server.baldwin.cx Cc: Andre Oppermann , freebsd-current@freebsd.org, Robert Watson , kmacy@freebsd.org, freebsd-net@freebsd.org Subject: Re: New optimized soreceive_stream() for TCP sockets, proof of concept 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 Mar 2007 21:27:21 -0000 On Monday 05 March 2007 15:43, Andrew Gallatin wrote: > > John Baldwin writes: > > > John has a patch that pins interrupt threads, etc, not sure what the status > > of > > > that is. CC'd. > > > > Tested and around for over a year. Sent to people several times but no > > benchmarking has resulted. It lives in p4 in //depot/user/jhb/intr/... > > > > I've just regenerated the patch at > > http://www.FreeBSD.org/~jhb/patches/intr_bind.patch (same URL as the last N > > It seems very useful, in conjunction with some sort of CPU binding > API. With ULE, and netserver bound via a hack to CPU 1, I > can nearly double the bandwidth by binding my ithread > to the opposite CPU using your patch. > > BTW, you need a little sanity checking somehere in the API > I tried to remove binding, and guessed at binding to -1 rather > than reading the source. That resulted in this panic: > > # ./ibind/ibind 256 -1 > kernel trap 12 with interrupts disabled > > > Fatal trap 12: page fault while in kernel mode > cpuid = 1; apic id = 01 > fault virtual address = 0x3806778bc > fault code = supervisor read data, page not present > instruction pointer = 0x8:0xffffffff8040a509 > stack pointer = 0x10:0xffffffff91e88ad0 > frame pointer = 0x10:0xffffffff91e88b00 > code segment = base 0x0, limit 0xfffff, type 0x1b > = DPL 0, pres 1, long 1, def32 0, gran 1 > processor eflags = resume, IOPL = 0 > current process = 788 (ibind) > [thread pid 788 tid 100047 ] > Stopped at intr_bind+0xe9: movl cpu_apic_ids(,%rdi,4),%esi > db> bt > Tracing pid 788 tid 100047 td 0xffffff001ea1b840 > intr_bind() at intr_bind+0xe9 > sysarch() at sysarch+0x14a > ia32_syscall() at ia32_syscall+0x236 > Xint0x80_syscall() at Xint0x80_syscall+0x60 > > Thanks again! There's currently no way to remove binding, and yes, the interface is a bit rough. We need a way for userland to query the current state for example. And I really think we might need to provide an MI interface with an MD callback. -- John Baldwin From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 21:41:55 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 20DB016A411; Mon, 5 Mar 2007 21:41:55 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from anuket.mj.niksun.com (gwnew.niksun.com [65.115.46.162]) by mx1.freebsd.org (Postfix) with ESMTP id A26B613C4B3; Mon, 5 Mar 2007 21:41:54 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from niksun.com (anuket [10.70.0.5]) by anuket.mj.niksun.com (8.13.6/8.13.6) with ESMTP id l25LfoIW082009; Mon, 5 Mar 2007 16:41:50 -0500 (EST) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-net@FreeBSD.org Date: Mon, 5 Mar 2007 16:41:46 -0500 User-Agent: KMail/1.6.2 References: <20070302084747.GA80114@libero.sunshine.ale> <200703021755.36600.jkim@FreeBSD.org> <20070303175910.GA89601@libero.sunshine.ale> In-Reply-To: <20070303175910.GA89601@libero.sunshine.ale> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200703051641.48881.jkim@FreeBSD.org> X-Virus-Scanned: ClamAV 0.88.6/2736/Mon Mar 5 13:55:43 2007 on anuket.mj.niksun.com X-Virus-Status: Clean Cc: Alessandro de Manzano , freebsd-amd64@FreeBSD.org Subject: Re: two problems with broadcom NICs 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 Mar 2007 21:41:55 -0000 On Saturday 03 March 2007 12:59 pm, Alessandro de Manzano wrote: > On Fri, Mar 02, 2007 at 05:55:35PM -0500, Jung-uk Kim wrote: > > > bge0@pci3:0:0: class=0x020000 card=0x165914e4 chip=0x165914e4 > > > rev=0x21 hdr=0x00 vendor = 'Broadcom Corporation' > > > device = 'BCM5750A1 NetXtreme Gigabit Ethernet PCI > > > Express' class = network > > > subclass = ethernet > > > > I am not sure about this controller (BTW, you had to include > > dmesg output) but you may want to try -CURRENT. > > My verbose dmesg was in my original mail (not attached, just after > my signature), I hope it is not been removed from some MUA :-) > > Unfortunately I need this machines in production and I must stay > with 6.2(-stable if needed) > > I saw your commit on -CURRENT for BCM7574 on Dell SC440 (did you > received my mail ? :) ) > > > > none1@pci4:0:0: class=0x020000 card=0x01df1028 chip=0x167a14e4 > > > rev=0x02 hdr=0x00 vendor = 'Broadcom Corporation' > > > class = network > > > subclass = ethernet > > > > This controller is not supported in 6.2-RELEASE. It should be > > supported in -CURRENT. > > Do you plan/know if/when it will be backported to RELENG_6 ? (maybe > for 6.3 ?) Try this and let me know if it works: http://people.freebsd.org/~jkim/bge_releng6.diff Jung-uk Kim From owner-freebsd-net@FreeBSD.ORG Mon Mar 5 22:05:54 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7DAAA16A405 for ; Mon, 5 Mar 2007 22:05:54 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outO.internet-mail-service.net (outO.internet-mail-service.net [216.240.47.238]) by mx1.freebsd.org (Postfix) with ESMTP id 5E1CD13C48D for ; Mon, 5 Mar 2007 22:05:54 +0000 (UTC) (envelope-from julian@elischer.org) Received: from mx0.idiom.com (HELO idiom.com) (216.240.32.160) by out.internet-mail-service.net (qpsmtpd/0.32) with ESMTP; Mon, 05 Mar 2007 13:39:56 -0800 Received: from [10.251.22.38] (nat.ironport.com [63.251.108.100]) by idiom.com (Postfix) with ESMTP id B9024125B2F; Mon, 5 Mar 2007 14:05:51 -0800 (PST) Message-ID: <45EC9440.8060508@elischer.org> Date: Mon, 05 Mar 2007 14:05:52 -0800 From: Julian Elischer User-Agent: Thunderbird 1.5.0.10 (Macintosh/20070221) MIME-Version: 1.0 To: Bruce M Simpson References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> <45EC2C37.7020604@incunabulum.net> In-Reply-To: <45EC2C37.7020604@incunabulum.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Yar Tikhiy , Kip Macy , freebsd-net@freebsd.org Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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 Mar 2007 22:05:54 -0000 Bruce M Simpson wrote: > Hi, > > Thanks for your reply. > > Yar Tikhiy wrote: >> My concern is that, with possible callers of ether_input() being >> not really *from* but *on behalf* of the interface, e.g., in Netgraph, >> IFF_DRV_RUNNING can be a way for the interface driver to tell us: >> I'm not ready yet, so don't believe anyone who pretends he has a >> packet from me. >> >> E.g., a vlan(4) interface gets IFF_DRV_RUNNING set only if it is >> properly attached to an Ethernet interface (known as the vlan's >> parent). AFAIK this is a totally legitimate use of IFF_DRV_RUNNING. >> Now assume that a vlan interface is UP but not RUNNING because it's >> detached from the parent. If a buggy Netgraph node or another >> source of synthetic traffic decides to inject a packet as though >> it comes in from the said vlan interface, handling the packet as >> usual will be bogus. >> >> IMHO the IFF_UP check in ether_input() is mostly for a similar >> purpose: If all callers of ether_input() were in real and conformant >> interface drivers, we shouldn't bother re-checking IFF_UP in >> ether_input() either because the driver of a down interface wouldn't >> call ether_input() for it in the first place. >> > I agree with the point you make here about non-conforming drivers; > however there are cogent performance arguments for checking IFF_UP > immediately. If an interface is configured administratively down, it > shouldn't be pumping traffic into the network stack. I do however > realize there are situations where this can happen. > > Suppose, for example, the thread which calls ether_input() is scheduled > on another CPU. Dropping such frames immediately on entry into > ether_input() saves tying up a thread for any longer than is absolutely > necessary. > > Perhaps Kip, who is working on 10GbE performance just now, can advise > further. >> >> Of course, we can omit the check for IFF_DRV_RUNNING if we think >> that synthetic traffic from an unready interface is OK. But I'm >> afraid we shouldn't. >> >> In addition, I wonder if we can move the conformance checks to a >> wrapper function so that conformant drivers don't have to pay the >> performance penalty of the "just in case" checks per each inbound >> Ethernet packet. >> > Thanks for explaining this further. Perhaps I should put the check for > IFF_DRV_RUNNING under INVARIANTS or make it a KASSERT? > > The code in bms_netdev as it stands bends the rules a little. The IFF_UP > check was in ether_demux() before. The original reason for the > ether_input()/ether_demux() split was to accomodate Netgraph. I must > admit that I hadn't fully mapped out the possible re-entry scenarios > with Netgraph because they may be arbitrarily complicated by its very > nature. > > Whilst Netgraph is a cool feature, and one I am very grateful that > FreeBSD has, I wonder if it is OK that we should have checks which > potentially pessimize performance for the main use cases to protect the > stack against Netgraph frames which are bogons, or bugs in Netgraph nodes. When we added netgraph we split both the input and output parts so that they would provide 'natural' entrypoints for a bridge. Consider where a bridge wants to put packets. Since the split however other code has made use of those entrypoints at different times. I'm not sure at the moment whether other code does so now. > > I'm open to hearing more about this, but my own resources (time, money) > are a limiting factor as to what I can do. > > Regards, > BMS > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 05:05:46 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 84A6A16A403 for ; Tue, 6 Mar 2007 05:05:46 +0000 (UTC) (envelope-from adityaa.kiran@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.228]) by mx1.freebsd.org (Postfix) with ESMTP id 4160813C47E for ; Tue, 6 Mar 2007 05:05:46 +0000 (UTC) (envelope-from adityaa.kiran@gmail.com) Received: by wr-out-0506.google.com with SMTP id 55so2679415wri for ; Mon, 05 Mar 2007 21:05:45 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=JHL3qx/gxNfb4zdI/vi5yVyw+8BjIrhTpLHqLaKOG10Batug8vOURSgAHJvSJRexUWmpBlrW6W+h79hIBn/aY7XFJluwB5Sv7cK365e2VIthKAXMMtdl7Mz3T5cmnjHgry0IPEFacNPph71g9FshfZ0yYSmnBboSXr0Nx1gAe1E= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=aTF8GcTuR6VTjOS0OietWSHMkkH/L0Xwg70UVFcfINK7O7jmCx+fmWn80OTj0VRRpR0Y27x12eHaVZoIKwtgs0vr6udVDsOK0PsyDdqxhLcVEmIglMAX61o+9jtXqDvlly7G/M9yfRAD1alF3uznPnPgDJ5oVMZI9n+DiagnUxY= Received: by 10.114.155.1 with SMTP id c1mr1584382wae.1173157542199; Mon, 05 Mar 2007 21:05:42 -0800 (PST) Received: by 10.114.145.9 with HTTP; Mon, 5 Mar 2007 21:05:42 -0800 (PST) Message-ID: <994cd1cf0703052105y375679a4t482f4e35988f9daf@mail.gmail.com> Date: Tue, 6 Mar 2007 10:35:42 +0530 From: "aditya kiran" To: "Lyndon Nerenberg" In-Reply-To: <20070305115615.W38684@orthanc.ca> MIME-Version: 1.0 References: <994cd1cf0703050842r5e54daa6y5fe6af3083e15cd@mail.gmail.com> <45EC6E88.3080101@tomjudge.com> <20070305115615.W38684@orthanc.ca> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: Tom Judge , freebsd-net@freebsd.org Subject: Re: PMTU Discovery support 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: Tue, 06 Mar 2007 05:05:46 -0000 RFC 1191 says to increase the PMTU at some itnerval (15 minutes default) next time a packet is sent, this will be used... and if PMTU is really increased, no ICMP error will be recieved. that shows an increase in the PMTU. I'm trying to understand if this mechanism is there in freebsd. any on this is appreicated thanks, Aditya On 3/6/07, Lyndon Nerenberg wrote: > > > As I understand it, it is not possible to detect upward changes in the > path > > MTU as there is no mechanism for a router to generate an error when a > packet > > is small enough to be accommodated by the MTU of the link to the next > hop. I > > may be wrong though. > > RFC1191 section 6.3. > > http://www.ietf.org/rfc/rfc1191.txt > > --lyndon > From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 07:39:55 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7FBFE16A401; Tue, 6 Mar 2007 07:39:55 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from pobox.codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id 2FCA513C441; Tue, 6 Mar 2007 07:39:55 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by pobox.codelabs.ru with esmtpsa (TLSv1:AES256-SHA:256) id 1HOUH1-0003Q1-BL; Tue, 06 Mar 2007 10:39:51 +0300 Date: Tue, 6 Mar 2007 10:39:46 +0300 From: Eygene Ryabinkin To: "Bruce M. Simpson" Message-ID: <20070306073945.GR57456@codelabs.ru> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EB4915.1090703@FreeBSD.org> <20070305145647.GT80319@codelabs.ru> <45EC3EFD.3000301@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <45EC3EFD.3000301@FreeBSD.org> Sender: rea-fbsd@codelabs.ru X-Spam-Status: No, score=-3.4 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_00 Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Tue, 06 Mar 2007 07:39:55 -0000 Bruce, > >In my case if_bridge drops off the packet because firewall fails to > >recognize the packet as good: the interface that is passed to a > >pfil_hooks is bad (I mean not the one expected). > > > The ifp which your patch changes is that of the mbuf chain when bridge_input >determines it is not for the bridge, but should be forwarded locally. The patch > forces a locally forwarded frame to have the same ifp as it had when it came > into bridge_input. I can foresee problems if the same Ethernet destination > address exists on multiple bridge member interfaces. The code in the if_bridge.c changes the ifp anyway: I am just setting the ifp to a more sane value. > NetBSD consistently uses pfil_hooks for the if_bridge *and* ether_input paths, > FreeBSD currently calls ipfw directly for ether_input, which may make a > difference to the behaviour which you are seeing with VLANs. I am awfully sorry, but you're seem to be mistaken: if_bridge calls the ipfw directly only for the L2 filtering (when the net.link.bridge.ipfw is set to 1). This is processed by the block in if_bridge just above to the 'ipfwpass' label. But the L3 filtering is done fully by the pfil hooks, as I understand the code. Moreover, I am using 'pf' in my case, not the ipfw. >Not understanding if_bridge fully, or the coupling of ipfw with if_ethersubr.c, >I would hope that Andrew and others have more to say on this. I am too ;)) Thank you! -- Eygene From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 15:46:50 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0C40516A408; Tue, 6 Mar 2007 15:46:50 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id D4AE813C481; Tue, 6 Mar 2007 15:46:49 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 42E651F50E6; Tue, 6 Mar 2007 10:46:49 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Tue, 06 Mar 2007 10:46:49 -0500 X-Sasl-enc: s9FqcU+WZeIQ2Lm35vXbKDCcAh9Inppn7BKCozRSQ4EI 1173196009 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 92EFF33FB1; Tue, 6 Mar 2007 10:46:48 -0500 (EST) Message-ID: <45ED8CE6.5030908@incunabulum.net> Date: Tue, 06 Mar 2007 15:46:46 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Yar Tikhiy References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> <45EC2C37.7020604@incunabulum.net> <20070305154824.GE57253@comp.chem.msu.su> In-Reply-To: <20070305154824.GE57253@comp.chem.msu.su> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org, Kip Macy Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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: Tue, 06 Mar 2007 15:46:50 -0000 Yar Tikhiy wrote: > My proposed check for IFF_DRV_RUNNING is by no means a priority > task. I can add it by myself after you finish your great current > project regarding ether_input() and friends. > Just committed in p4: ==== //depot/user/bms/netdev/sys/net/if_ethersubr.c#6 - /home/bms/p4/netdev/sys/net/if_ethersubr.c ==== --- /tmp/tmp.11470.0 Tue Mar 6 15:45:08 2007 +++ /home/bms/p4/netdev/sys/net/if_ethersubr.c Tue Mar 6 15:45:01 2007 @@ -511,6 +511,13 @@ m_freem(m); return; } +#ifdef DIAGNOSTIC + if ((ifp->if_flags & IFF_DRV_RUNNING) == 0) { + if_printf(ifp, "discard frame at !IFF_DRV_RUNNING\n"); + m_freem(m); + return; + } +#endif Thanks! BMS From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 16:00:14 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9731D16A468; Tue, 6 Mar 2007 16:00:14 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 5033B13C481; Tue, 6 Mar 2007 16:00:14 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id E5D3E1F4F78; Tue, 6 Mar 2007 11:00:13 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Tue, 06 Mar 2007 11:00:13 -0500 X-Sasl-enc: EecVID1IfhAABOYh1QfuCshk5I6f9AJgSysG1cbx+zrf 1173196813 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 3C8B33408D; Tue, 6 Mar 2007 11:00:11 -0500 (EST) Message-ID: <45ED900A.7050208@FreeBSD.org> Date: Tue, 06 Mar 2007 16:00:10 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Eygene Ryabinkin References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EB4915.1090703@FreeBSD.org> <20070305145647.GT80319@codelabs.ru> <45EC3EFD.3000301@FreeBSD.org> <20070306073945.GR57456@codelabs.ru> In-Reply-To: <20070306073945.GR57456@codelabs.ru> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, thompsa@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Tue, 06 Mar 2007 16:00:14 -0000 Eygene Ryabinkin wrote: > I am awfully sorry, but you're seem to be mistaken: Thanks for clarifying this. That'll be because I didn't read if_bridge that far. ;^) In my original message I was just looking at if_ethersubr.c. I need to make sure any changes which are made to if_bridge to deal with vlan problems are incorporated into bms_netdev so that after I commit M_PROMISC, it does the right thing. > if_bridge calls > the ipfw directly only for the L2 filtering (when the net.link.bridge.ipfw > is set to 1). This is processed by the block in if_bridge just > above to the 'ipfwpass' label. > > In bms_netdev, the behaviour of ether_demux() is unchanged. ip_dn_claim_rule() is called to determine if there is an IPFW (usually dummynet) rule for the input frame at ethernet level, if-and-only-if net.link.ether.ipfw is non-zero. I just committed some comments to clarify this and styled it the same as the check in ether_output_frame(). However -- the IPFW check in ether_demux() is *skipped* in bms_netdev if M_PROMISC is set. This is because we might drop packets which are destined for vlan_input() which flow in because the interface is IFF_PROMISC. Strictly speaking this bends the rules of dummynet, because if you have frames coming in due to promiscuous mode, which the rest of the stack doesn't expect, they won't be filtered by Dummynet pipes. > But the L3 filtering is done fully by the pfil hooks, as I understand > the code. Moreover, I am using 'pf' in my case, not the ipfw. > Yes, this is always the case for the upper layers. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 16:06:01 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0E3C716A403; Tue, 6 Mar 2007 16:06:01 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id D60B213C46B; Tue, 6 Mar 2007 16:06:00 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 92EE21F49CC; Tue, 6 Mar 2007 11:06:00 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Tue, 06 Mar 2007 11:06:00 -0500 X-Sasl-enc: v35MhDvnLGtsYkbOSQNGbFCO+OGmSJAg1j5vf+03uPxd 1173197160 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id AF216C9B4; Tue, 6 Mar 2007 11:05:58 -0500 (EST) Message-ID: <45ED9165.5080406@incunabulum.net> Date: Tue, 06 Mar 2007 16:05:57 +0000 From: Bruce M Simpson User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Julian Elischer References: <45E8B964.2090200@incunabulum.net> <20070303215359.GB40430@comp.chem.msu.su> <45EA0756.2000107@incunabulum.net> <20070304070458.GG40430@comp.chem.msu.su> <45EB750A.90105@incunabulum.net> <20070305142411.GC57253@comp.chem.msu.su> <45EC2C37.7020604@incunabulum.net> <45EC9440.8060508@elischer.org> In-Reply-To: <45EC9440.8060508@elischer.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Yar Tikhiy , Kip Macy , freebsd-net@freebsd.org Subject: Re: [PATCH] Ethernet cleanup; 802.1p input and M_PROMISC 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: Tue, 06 Mar 2007 16:06:01 -0000 Julian Elischer wrote: > > When we added netgraph we split both the input and output parts > so that they would provide 'natural' entrypoints for a bridge. > Consider where a bridge wants to put packets. In bms_netdev, bridge_input() is entered directly from ether_input(). It may potentially re-enter, so M_PROMISC is cleared on frames thus handed off to if_bridge(4). Same for ng_ether(4). > > Since the split however other code has made use of those entrypoints > at different > times. I'm not sure at the moment whether other code does so now. According to KScope on -CURRENT, the only other places which call the split ether_demux() are dummynet_send() and ng_ether_rcv_upper(). Regards, BMS From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 17:50:55 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F40FA16A400 for ; Tue, 6 Mar 2007 17:50:54 +0000 (UTC) (envelope-from rik@inse.ru) Received: from mail.inse.ru (inse.ru [144.206.128.1]) by mx1.freebsd.org (Postfix) with ESMTP id 27BED13C491 for ; Tue, 6 Mar 2007 17:50:53 +0000 (UTC) (envelope-from rik@inse.ru) Received: from [127.0.0.1] (www.inse.ru [144.206.128.1]) by mail.inse.ru (Postfix) with ESMTP id 902E533C4F; Tue, 6 Mar 2007 20:18:21 +0300 (MSK) Message-ID: <45EDA348.3030309@inse.ru> Date: Tue, 06 Mar 2007 20:22:16 +0300 From: Roman Kurakin User-Agent: Thunderbird 1.5.0.7 (X11/20061110) MIME-Version: 1.0 To: Eygene Ryabinkin References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> In-Reply-To: <20070304160613.GN80319@codelabs.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: rik@FreeBSD.org, andre@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, thompsa@FreeBSD.org, bms@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Tue, 06 Mar 2007 17:50:55 -0000 Ok, since no one want to provide an explanation I'll to do it myself. Lets assume that we have two interfaces that are joined to bridge. I'll call them as A and B. Both has a distinct MACs. Now we have two cases for behaviour of filtering. The first case that we will behave like real hub between the physical interfaces and its virtual logical representation. The packet will arise on logical interface for which it is intended for (according to dst MAC). That is how it is implemented now. So now we can filter packets treating dst interface as incoming, but not the interfaces it comes through physically. The second variant to do visa versa, e q filter packets according interfaces they physically come in, and do not take in to account the dst MAC. Both variant have bad sides and good sides. Both are not wrong from the filtering point of view. So I do not want to discuss which one is correct. Now about the problem. Lets assume that we also have a C interfaces, but with VLANs or anything that will bring the same situation. I'll call VLANs C1,C2...CN. Now we can't implement the first case without a problems, cause all Cx will have the same MAC, MAC of the C interface. In current implementation we will take the first interface on the list, which would be the last added to the bridge. This problem could be fixed. Be patient, I'll describe all cases, but not at once. Read till the end of the letter. If I understand right the Eygene's patch solves problem by introducing the second behaviour. It is not quite good cause it will change the old known behaviour. Here is the patch itself: --- if_bridge.c.orig Fri Mar 2 18:23:56 2007 +++ if_bridge.c Sat Mar 3 05:04:38 2007 @@ -2122,7 +2122,11 @@ LIST_FOREACH(bif2, &sc->sc_iflist, bif_next) { if (bif2->bif_ifp->if_type == IFT_GIF) continue; - /* It is destined for us. */ + /* It is destined for us. We should not rely on the + * found interface's MAC as the interface identifier, + * because vlanX interfaces are sharing their MAC + * with the parent. Moreover, we do know the interface + * the packet is coming from. So we're using it. */ if (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, ETHER_ADDR_LEN) == 0 #ifdef DEV_CARP @@ -2133,7 +2137,7 @@ if (bif->bif_flags & IFBIF_LEARNING) (void) bridge_rtupdate(sc, eh->ether_shost, bif, 0, IFBAF_DYNAMIC); - m->m_pkthdr.rcvif = bif2->bif_ifp; + m->m_pkthdr.rcvif = ifp; BRIDGE_UNLOCK(sc); return (m); } I suggest to fix this problem in the other way, by checking if the physical interface is the dst interface by MAC. Eq if we got packet from Ci, it will be market as received from Ci, not from Cj. Yes it will add double checking for this interface it is not the dst with some probability, but will optimize the case the dst is the current one cause we will not check the list. This will keep the old behaviour eq case 1 and will do the same trick for cases like VLANs. Here my variant of the patch: + /* Give a chance for ifp at first priority. This will help in case we + * the packet comes through the interface with VLAN's and the same + * MACs on several interfaces in a bridge. Also will save some circles + * in case dst interface is the physical input interface (eq ifp). + */ + if (ifp->if_type == IFT_GIF + && (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, + ETHER_ADDR_LEN) == 0 +#ifdef DEV_CARP + || (bif2->bif_ifp->if_carp + && carp_forus(bif2->bif_ifp->if_carp, eh->ether_dhost)) +#endif + )) { + if (bif->bif_flags & IFBIF_LEARNING) + (void) bridge_rtupdate(sc, + eh->ether_shost, bif, 0, IFBAF_DYNAMIC); + m->m_pkthdr.rcvif = ifp; + BRIDGE_UNLOCK(sc); + return (m); + } LIST_FOREACH(bif2, &sc->sc_iflist, bif_next) { if (bif2->bif_ifp->if_type == IFT_GIF) continue; /* It is destined for us. */ if (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, ETHER_ADDR_LEN) == 0 #ifdef DEV_CARP || (bif2->bif_ifp->if_carp && carp_forus(bif2->bif_ifp->if_carp, eh->ether_dhost)) #endif ) { if (bif->bif_flags & IFBIF_LEARNING) (void) bridge_rtupdate(sc, eh->ether_shost, bif, 0, IFBAF_DYNAMIC); m->m_pkthdr.rcvif = bif2->bif_ifp; BRIDGE_UNLOCK(sc); return (m); } As you may note this will fix the problem only for case the packet comes from dst VLAN. In case this packet comes from the other interface (or not dst VLAN) we will also get a random VLAN (not quite random, but this may not really help). The last case could be solved by trying to pass the packet through the filter as more as we have an interfaces with the same MAC in one bridge till the first one according to the rules will say this is my packet or no one will take it. We also should have the ability to filter packet according to its physical origin on this host eq case2. But this is other stories. Since no one claim responsibility for fixing this, I'll do it myself. I'll post the final patch at the end of this week and will wait one more week for the last chance to stop me. After that it will be committed. rik Eygene Ryabinkin wrote: > Good day, the freebsd-net readers. > > Perhaps someone can look at the kern/109815 and provide some > feedback. Citing my PR: > > >>> When if_bridge is used to gather multiple vlan interfaces that have >>> the same physical parent (I will call such vlan interfaces the 'vlan >>> group') the interface identifier that will be passed to the >>> pfil_hooks will be sometimes wrong. For all packets coming from the >>> 'vlan group' and destined to some local interface the incoming interface >>> passed to the pfil_hooks will be the last interface in that group >>> regardless of the actual incoming interface. The 'last interface' is >>> the interface that was added to the if_bridge at the very last 'addm' >>> command. >>> >>> The problem is lying in the fact that MAC addresses of the 'vlan group' >>> are just the same and they are equal to the MAC address of the parent >>> interface. And the check for the unicat packet that is destined for >>> 'us' in the if_bridge.c:bridge_input() is walking by the list of the >>> if_bridge-attached interfaces and compares the MAC addresses to the >>> packet's one. Once match is found the interface in the packet header >>> will be rewritten to the found list entry's one. Apparently such >>> code flow will select the last added interface from the 'vlan group' >>> because FreeBSD list macros are adding list members to the beginning >>> of the linked list. >>> >>> BPF will receive the right interface, because it is tapped before >>> bridge_input (in if_ethersubr.c). >>> > > Roman Kurakin suggested that the patch can break some things: > > Sun, Mar 04, 2007 at 01:08:40AM +0300, Roman Kurakin wrote: > >> The idea behind current code could be that in case of bridge the >> interface for which this packet in?nded is much more important >> than the physical interface it is arrived from. >> If this is the case, than it would be much better do the same logic >> for ifp and in case it is not that interface to check the list. >> This will fix the problem in case of vlans and will leave the old >> behavior for the other cases. >> >> Any comments? >> > > I've slightly elaborated his idea and commented on it: > Sun, Mar 04, 2007 at 09:22:03AM +0300, Eygene Ryabinkin wrote: > >> So, you're saying the following: let us have two interfaces in the >> bridge ifA and ifB with the MAC-A and MAC-B. In the current situation >> packet coming from the physical interface ifA but destined to the >> MAC-B, then the interface seen by the packet filter will be ifB and >> not the ifA. Right? >> >> In principle, this situation can be used for something. But then we >> should at least teah BPF to behave this way, because as you remember >> from spending three hours before the console with me and trying to >> diagnose the problem with tcpdump we were amazed to see the discrepance >> between bpf and pfil. So it should be at least documented. >> >> But as I understand, my patch will let the described situation to >> work as usual -- packets will still be delivered to the ifB, but >> packet filter will see the physical incoming interface. The patch >> should not break the delivery of the packet since all I do is the >> change of the rcvif. Or I am wrong? >> > > I traced the current if_bridge.c behaviour to the NetBSD's if_bridge.c > 1.9. This was the first version in that the firewall hooks were > introduced. And the assumtion that the MAC identifies the physical > interfaces was used in this first version. > > And a question: can anyone say if my patch will break some known > good behaviour and if the current behaviour of if_bridge is based > on some logic I am currently failing to understand. > > Thank you! > From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 19:06:23 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DCC5F16A404 for ; Tue, 6 Mar 2007 19:06:22 +0000 (UTC) (envelope-from miroslav@svishtov.net) Received: from mail.svishtov.net (mail.svishtov.net [85.217.192.3]) by mx1.freebsd.org (Postfix) with ESMTP id 300D813C481 for ; Tue, 6 Mar 2007 19:06:21 +0000 (UTC) (envelope-from miroslav@svishtov.net) X-Spam-Status: No, hits=5.2 required=7.5 tests=AWL: -0.800,BAYES_99: 4.07,HTML_50_60: 0.539, HTML_MESSAGE: 0.001,RCVD_NUMERIC_HELO: 1.348 X-Spam-Level: ***** Received: from 85.217.217.217 ([85.217.217.217]) by mail.svishtov.net for miroslav@svishtov.net; Tue, 6 Mar 2007 20:49:47 +0200 From: Miroslav Slavkov To: freebsd-net@freebsd.org Message-ID: <20070306184947.ce59ba1f@mail.svishtov.net> Date: Tue, 06 Mar 2007 20:49:47 +0200 X-Mailer: Kerio MailServer 6.1.1 WebMail X-User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; bg; rv:1.8.0.10) Gecko/20070216 Firefox/1.5.0.10 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Re: mpd success stories, anyone? 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: Tue, 06 Mar 2007 19:06:23 -0000 =20 We're running PPPoE services with mpd 4.1 on FreeBSD 6.2-STABLE without = any flaws for about 3 weeks. Opened ng interfaces: 2048 Avg usage: 500 Still migrating.. usage will grow soon. The hardware is: 2 x Intel Xeon 5110 with 1 Gig Memory and nics Intel Pr= o/1000 (em) the machine is a gateway to several other networks and is currently perf= orming at ~80% idle CPU and ~10% Interrupt. Performance information from the users will be available soon :) =5F=5F=5F=5F=5F =20 From: Alexander Motin [mailto:mav@alkar.net] To: Alex Povolotsky [mailto:tarkhil@webmail.sub.ru] Cc: freebsd-net@freebsd.org Sent: Thu, 22 Feb 2007 19:15:45 +0200 Subject: Re: mpd success stories, anyone=3F Alex Povolotsky wrote: > After disabling windowing and setting net.graph's, mpd4 refuses to wor= k > and no ng interfaces ever created >=20 > lowering both tunables to 128000 solved the problem, will look more. Oops! I have missed kern.ipc.maxsockbuf=3D1048576 , which is required before those two tunes. But as I have said that options is not required for mpd itself. It's=20 just usefull for 'ngctl list' command. --=20 Alexander Motin mav@alkar.net Optima Telecom =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F= =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" =20 From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 20:47:01 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 392C016A403 for ; Tue, 6 Mar 2007 20:47:01 +0000 (UTC) (envelope-from non_secure@yahoo.com) Received: from web51013.mail.yahoo.com (web51013.mail.yahoo.com [68.142.224.83]) by mx1.freebsd.org (Postfix) with SMTP id CC0D313C428 for ; Tue, 6 Mar 2007 20:47:00 +0000 (UTC) (envelope-from non_secure@yahoo.com) Received: (qmail 63744 invoked by uid 60001); 6 Mar 2007 20:20:19 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=4bSnrs+UQNgdtpwy2ZX+ejWpFoex4sDorXS0RD0XuSu91cY4x3D7omzLrUO0ulIlDHl7Q3Q3YmgVmgZdIvTude/ZooUb+nyEtALqQieeW/Jkx/pITib1CkPmZrDBGFSINO0wnuXjW3fVfrm0o6dNfhOffNgUtXk/TujlkmCPUMI=; X-YMail-OSG: rdbCk8cVM1kSUs8JWA8qhnTleH9HG.hFhNI3zSCjcl2D2rFu8ZQx3K3iwCxL7I22iiHFyanFnPv7.SnzbIt5u_VyM8pyGB_MReSTjos3NQiiW.5B5rZTv2zAIJyGezl2nUi5MgukUcBDdmBw9ccQyv9Ibw-- Received: from [75.72.230.91] by web51013.mail.yahoo.com via HTTP; Tue, 06 Mar 2007 12:20:19 PST Date: Tue, 6 Mar 2007 12:20:19 -0800 (PST) From: Jason Arnaute To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Message-ID: <409952.63095.qm@web51013.mail.yahoo.com> X-Mailman-Approved-At: Tue, 06 Mar 2007 21:25:20 +0000 Subject: what is wrong with ipv6_defaultrouter ? 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: Tue, 06 Mar 2007 20:47:01 -0000 (FreeBSD 6.2-RELEASE) I have two ipv6 related lines in my /etc/rc.conf: ifconfig_em0_alias0="inet6 XXX::2/48" ipv6_defaultrouter="XXX::1" When I boot like this, I do not get a default ipv6 route in my routing table. 'netstat -rn' shows me a default route for ipv4, but no default route for ipv6. I am forced to manually type in: route add -inet6 default XXX::1 and then everything works and I have a default ipv6 route. My question is, what have I done wrong in rc.conf and how can I get a ipv6 default route at boot time from an rc.conf directive ? Thanks. ____________________________________________________________________________________ TV dinner still cooling? Check out "Tonight's Picks" on Yahoo! TV. http://tv.yahoo.com/ From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 21:55:05 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A92A416A403 for ; Tue, 6 Mar 2007 21:55:05 +0000 (UTC) (envelope-from bmah@freebsd.org) Received: from b.mail.sonic.net (b.mail.sonic.net [64.142.19.5]) by mx1.freebsd.org (Postfix) with ESMTP id 8C0F313C4B4 for ; Tue, 6 Mar 2007 21:55:05 +0000 (UTC) (envelope-from bmah@freebsd.org) Received: from [192.168.26.75] (64-84-9-2-sf-gw.ncircle.com [64.84.9.2]) (authenticated bits=0) by b.mail.sonic.net (8.13.8.Beta0-Sonic/8.13.7) with ESMTP id l26Lt2Ma027848 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 6 Mar 2007 13:55:05 -0800 Message-ID: <45EDE332.6070206@freebsd.org> Date: Tue, 06 Mar 2007 13:54:58 -0800 From: "Bruce A. Mah" User-Agent: Thunderbird 1.5.0.10 (Macintosh/20070221) MIME-Version: 1.0 To: Jason Arnaute References: <409952.63095.qm@web51013.mail.yahoo.com> In-Reply-To: <409952.63095.qm@web51013.mail.yahoo.com> X-Enigmail-Version: 0.94.1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig581AF2E55952E697BB72FAF1" Cc: freebsd-net@freebsd.org Subject: Re: what is wrong with ipv6_defaultrouter ? 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: Tue, 06 Mar 2007 21:55:05 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig581AF2E55952E697BB72FAF1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable If memory serves me right, Jason Arnaute wrote: > (FreeBSD 6.2-RELEASE) >=20 > I have two ipv6 related lines in my /etc/rc.conf: >=20 > ifconfig_em0_alias0=3D"inet6 XXX::2/48" > ipv6_defaultrouter=3D"XXX::1" >=20 > When I boot like this, I do not get a default ipv6 > route in my routing table. 'netstat -rn' shows me a > default route for ipv4, but no default route for ipv6. You probably want to replace that first line with: ipv6_ifconfig_em0=3D"XXX::2/48" Also make sure to set ipv6_enable=3D"YES". Bruce. --------------enig581AF2E55952E697BB72FAF1 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF7eMy2MoxcVugUsMRAijTAJ9YUgv2fIN+MsqstTyal4GfibpSUQCaAsYk Dfm1pJU1kHCv/LT1gcdOTVA= =NTan -----END PGP SIGNATURE----- --------------enig581AF2E55952E697BB72FAF1-- From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 22:35:26 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1D9FA16A404 for ; Tue, 6 Mar 2007 22:35:26 +0000 (UTC) (envelope-from non_secure@yahoo.com) Received: from web51015.mail.yahoo.com (web51015.mail.yahoo.com [206.190.39.80]) by mx1.freebsd.org (Postfix) with SMTP id AEF3913C441 for ; Tue, 6 Mar 2007 22:35:25 +0000 (UTC) (envelope-from non_secure@yahoo.com) Received: (qmail 69528 invoked by uid 60001); 6 Mar 2007 22:35:25 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=z4/e8L5sjK81QQ1ZC4kwmqYfGgRzC8zgmCx+/GUPXTGLc1irIIUXDekQ1PFYqB67Xurb79WB0gQUwIe5gaqxqVcnCt147PcYUDaAostWtzxFK/wJ4bEBrry2kMUN0rhslYxDcCTtPMZtOKj3U3PF2//t5PlsCBGEfjt/SEVYUXM=; X-YMail-OSG: IUAy4KQVM1lLUOs63N4etWWBJN94wunImK7TOqZFChE2agXCpp6J5WkabbHTXvf2EH2HE9TnBVw5Pf.mCedE1S0dJIC0eH2dWIcqKSqQ04QCvYnMDesxlmzelBKXuqtw5hC3aj_wfoMBEZF5t4j1gbje5Q-- Received: from [75.72.230.91] by web51015.mail.yahoo.com via HTTP; Tue, 06 Mar 2007 14:35:24 PST Date: Tue, 6 Mar 2007 14:35:24 -0800 (PST) From: Jason Arnaute To: "Bruce A. Mah" In-Reply-To: <45EDE332.6070206@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Message-ID: <888880.69225.qm@web51015.mail.yahoo.com> Cc: freebsd-net@freebsd.org Subject: Re: what is wrong with ipv6_defaultrouter ? 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: Tue, 06 Mar 2007 22:35:26 -0000 --- "Bruce A. Mah" wrote: > If memory serves me right, Jason Arnaute wrote: > > (FreeBSD 6.2-RELEASE) > > > > I have two ipv6 related lines in my /etc/rc.conf: > > > > ifconfig_em0_alias0="inet6 XXX::2/48" > > ipv6_defaultrouter="XXX::1" > > > > When I boot like this, I do not get a default ipv6 > > route in my routing table. 'netstat -rn' shows me > a > > default route for ipv4, but no default route for > ipv6. > > You probably want to replace that first line with: > > ipv6_ifconfig_em0="XXX::2/48" > > Also make sure to set ipv6_enable="YES". But the ipv6 ifconfig and the ipv6 networking all work fine without either of those changes. I'd prefer not to fix anything that isn't broken ... Are you suggesting that one or both of those changes will cause the ipv6_defaultrouter declaration to suddenly begin working ? Do you use that same ipv6_defaultrouter declaration in your rc.conf ? Thanks. ____________________________________________________________________________________ Food fight? Enjoy some healthy debate in the Yahoo! Answers Food & Drink Q&A. http://answers.yahoo.com/dir/?link=list&sid=396545367 From owner-freebsd-net@FreeBSD.ORG Tue Mar 6 23:01:57 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8C4FA16A400 for ; Tue, 6 Mar 2007 23:01:57 +0000 (UTC) (envelope-from bmah@freebsd.org) Received: from a.mail.sonic.net (a.mail.sonic.net [64.142.16.245]) by mx1.freebsd.org (Postfix) with ESMTP id 754AC13C48E for ; Tue, 6 Mar 2007 23:01:57 +0000 (UTC) (envelope-from bmah@freebsd.org) Received: from [192.168.26.75] (64-84-9-2-sf-gw.ncircle.com [64.84.9.2]) (authenticated bits=0) by a.mail.sonic.net (8.13.8.Beta0-Sonic/8.13.7) with ESMTP id l26N1vEK008973 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 6 Mar 2007 15:01:57 -0800 Message-ID: <45EDF2E1.1000000@freebsd.org> Date: Tue, 06 Mar 2007 15:01:53 -0800 From: "Bruce A. Mah" User-Agent: Thunderbird 1.5.0.10 (Macintosh/20070221) MIME-Version: 1.0 To: Jason Arnaute References: <888880.69225.qm@web51015.mail.yahoo.com> In-Reply-To: <888880.69225.qm@web51015.mail.yahoo.com> X-Enigmail-Version: 0.94.1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigDDB0B64BA8C990E44D0A6119" Cc: freebsd-net@freebsd.org Subject: Re: what is wrong with ipv6_defaultrouter ? 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: Tue, 06 Mar 2007 23:01:57 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigDDB0B64BA8C990E44D0A6119 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable If memory serves me right, Jason Arnaute wrote: > --- "Bruce A. Mah" wrote: >=20 >> If memory serves me right, Jason Arnaute wrote: >>> (FreeBSD 6.2-RELEASE) >>> >>> I have two ipv6 related lines in my /etc/rc.conf: >>> >>> ifconfig_em0_alias0=3D"inet6 XXX::2/48" >>> ipv6_defaultrouter=3D"XXX::1" >>> >>> When I boot like this, I do not get a default ipv6 >>> route in my routing table. 'netstat -rn' shows me >> a >>> default route for ipv4, but no default route for >> ipv6. >> >> You probably want to replace that first line with: >> >> ipv6_ifconfig_em0=3D"XXX::2/48" >> >> Also make sure to set ipv6_enable=3D"YES". >=20 >=20 > But the ipv6 ifconfig and the ipv6 networking all work > fine without either of those changes. I'd prefer not > to fix anything that isn't broken ... Not having a default route isn't what I'd call "working fine". :-) ipv6_ifconfig_em0 is the documented, supported mechanism for specifying an IPv6 address for your em0 interface at system startup time. The fact that you were able to do this by specifying an interface alias is a happy accident but it's not supported. > Are you suggesting that one or both of those changes > will cause the ipv6_defaultrouter declaration to > suddenly begin working ? Yes. Note that as of 6.2-RELEASE if you don't set ipv6_enable=3D"YES" you migh= t not get a link-local address on any of your network interfaces. This will cause some problems. (This change was made deliberately in order to avoid assigning IPv6 link-local addresses on systems that weren't explicitly configured to enable IPv6.) > Do you use that same ipv6_defaultrouter declaration > in your rc.conf ? Yes. Please read through the rc.conf(5) manpage...there's an explanation of the various ipv6_* variables there. There should be something on this topic in the FreeBSD Handbook as well. Bruce. --------------enigDDB0B64BA8C990E44D0A6119 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF7fLh2MoxcVugUsMRAh/uAKDAYZOEUwu2oDYt97McYHrP0wYbpgCgnvxJ PDqkmao9hcWeM+QqrQ1KZco= =G1Nc -----END PGP SIGNATURE----- --------------enigDDB0B64BA8C990E44D0A6119-- From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 06:36:22 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 29E8516A400; Wed, 7 Mar 2007 06:36:22 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from pobox.codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id BA03813C46B; Wed, 7 Mar 2007 06:36:19 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by pobox.codelabs.ru with esmtpsa (TLSv1:AES256-SHA:256) id 1HOpl0-000DpB-QT; Wed, 07 Mar 2007 09:36:15 +0300 Date: Wed, 7 Mar 2007 09:36:07 +0300 From: Eygene Ryabinkin To: Roman Kurakin Message-ID: <20070307063606.GU57456@codelabs.ru> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EDA348.3030309@inse.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <45EDA348.3030309@inse.ru> Sender: rea-fbsd@codelabs.ru X-Spam-Status: No, score=-3.4 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_00 Cc: rik@FreeBSD.org, andre@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, thompsa@FreeBSD.org, bms@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Wed, 07 Mar 2007 06:36:22 -0000 Roman, good day! > Lets assume that we have two interfaces that are joined to bridge. > I'll call them as A and B. Both has a distinct MACs. > > Now we have two cases for behaviour of filtering. The first case that > we will behave like real hub between the physical interfaces and its > virtual logical representation. The packet will arise on logical interface > for which it is intended for (according to dst MAC). That is how it > is implemented now. So now we can filter packets treating dst interface > as incoming, but not the interfaces it comes through physically. Yes, I've finally got the idea, thanks! > The second variant to do visa versa, e q filter packets according interfaces > they physically come in, and do not take in to account the dst MAC. > > Both variant have bad sides and good sides. Both are not wrong from the > filtering point of view. So I do not want to discuss which one is correct. I can add only one thing: I am already did the patch to implement filtering on the physical incoming interface as well as on the logical one. It is working quite well for the week on a rather busy filtering bridge that is serving around 60 hosts. The additional behaviour is controlled by a new sysctl, so it can be easily switched on and off. > Now about the problem. Lets assume that we also have a C interfaces, > but with VLANs or anything that will bring the same situation. I'll call > VLANs C1,C2...CN. > > Now we can't implement the first case without a problems, cause all Cx > will have the same MAC, MAC of the C interface. In current implementation > we will take the first interface on the list, which would be the last added > to the bridge. This problem could be fixed. Be patient, I'll describe all > cases, but not at once. Read till the end of the letter. > > If I understand right the Eygene's patch solves problem by introducing the > second behaviour. It is not quite good cause it will change the old known > behaviour. Here is the patch itself: > > --- if_bridge.c.orig Fri Mar 2 18:23:56 2007 > +++ if_bridge.c Sat Mar 3 05:04:38 2007 > @@ -2122,7 +2122,11 @@ > LIST_FOREACH(bif2, &sc->sc_iflist, bif_next) { > if (bif2->bif_ifp->if_type == IFT_GIF) > continue; > - /* It is destined for us. */ > + /* It is destined for us. We should not rely on the > + * found interface's MAC as the interface identifier, > + * because vlanX interfaces are sharing their MAC > + * with the parent. Moreover, we do know the interface > + * the packet is coming from. So we're using it. */ > if (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, > ETHER_ADDR_LEN) == 0 > #ifdef DEV_CARP > @@ -2133,7 +2137,7 @@ > if (bif->bif_flags & IFBIF_LEARNING) > (void) bridge_rtupdate(sc, > eh->ether_shost, bif, 0, IFBAF_DYNAMIC); > - m->m_pkthdr.rcvif = bif2->bif_ifp; > + m->m_pkthdr.rcvif = ifp; > BRIDGE_UNLOCK(sc); > return (m); > } > > > I suggest to fix this problem in the other way, by checking if the physical > interface is the dst interface by MAC. Eq if we got packet from Ci, > it will be market as received from Ci, not from Cj. Yes it will add > double checking for this interface it is not the dst with some > probability, but will optimize the case the dst is the current > one cause we will not check the list. This will keep the old behaviour > eq case 1 and will do the same trick for cases like VLANs. > Here my variant of the patch: > > + /* Give a chance for ifp at first priority. This will help in case we > + * the packet comes through the interface with VLAN's and the same > + * MACs on several interfaces in a bridge. Also will save some circles > + * in case dst interface is the physical input interface (eq ifp). > + */ > + if (ifp->if_type == IFT_GIF > + && (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, > + ETHER_ADDR_LEN) == 0 > +#ifdef DEV_CARP > + || (bif2->bif_ifp->if_carp + && > carp_forus(bif2->bif_ifp->if_carp, eh->ether_dhost)) > +#endif > + )) { > + if (bif->bif_flags & IFBIF_LEARNING) > + (void) bridge_rtupdate(sc, > + eh->ether_shost, bif, 0, IFBAF_DYNAMIC); > + m->m_pkthdr.rcvif = ifp; > + BRIDGE_UNLOCK(sc); > + return (m); > + } > LIST_FOREACH(bif2, &sc->sc_iflist, bif_next) { > if (bif2->bif_ifp->if_type == IFT_GIF) > continue; > /* It is destined for us. */ > if (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, > ETHER_ADDR_LEN) == 0 > #ifdef DEV_CARP > || (bif2->bif_ifp->if_carp && > carp_forus(bif2->bif_ifp->if_carp, eh->ether_dhost)) > #endif > ) { > if (bif->bif_flags & IFBIF_LEARNING) > (void) bridge_rtupdate(sc, > eh->ether_shost, bif, 0, IFBAF_DYNAMIC); > m->m_pkthdr.rcvif = bif2->bif_ifp; > BRIDGE_UNLOCK(sc); > return (m); > } > > > As you may note this will fix the problem only for case the packet comes from > dst VLAN. In case this packet comes from the other interface (or not dst VLAN) > we will also get a random VLAN (not quite random, but this may not really > help). Yes, this patch will do the trick. I propose to make the inner 'if' with its body the inline function to avoid duplicating the code. I am not 100% sure about inline function, maybe macro will suit better. And I propose to document the current behaviour of the if_bridge and filtering in its man page for the others to avoid struggling with this ussie. I will try to implement this modifications and will post it there. > > The last case could be solved by trying to pass the packet through > the filter as more as we have an interfaces with the same MAC in > one bridge till the first one according to the rules will say this > is my packet or no one will take it. May be it will be good, but we will need an additional sysctl for this. By the way, I am already a bit scared with the number of statements like 'if (sysctl_is_set) { do_that }' in the if_bridge. May be it will be better to try to eliminate some 'if' statements by providing dynamic wrappers to the functions that implement the bridge behaviour based on the value of the current sysctl set (and assign the pointer to those functions to the pointer that will be called once bridge wants to do the job). Or implement the 'case' statement that probably will do the trick. The L2 bridge should be fast as hell, isn't it? I will try to illustrate my ideas by code, but a bit later. Or we should not trade the code cleanness for the speed? Sure, as I am not implemented this now I can not say about the speed gains, sorry. And another idea about if_bridge (sorry, but today I feel myself about spitting my ideas to everyone): maybe it is good to implement the per-bridge set of sysctls that are governing the filtering behaviour? For example, one bridge wants to the the full member and bridge filtering, but another one wants no filtering at all. It is possible now, but the second bridge will waste CPU calling the pfil_hooks that will just let the packet to flow through. Shutting up, thanks for your patience! -- Eygene From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 12:31:05 2007 Return-Path: X-Original-To: net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 553D716A400; Wed, 7 Mar 2007 12:31:05 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 1365413C4A5; Wed, 7 Mar 2007 12:31:05 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id A2EC11F5DFF; Wed, 7 Mar 2007 07:31:04 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Wed, 07 Mar 2007 07:31:04 -0500 X-Sasl-enc: lWPUQ2XTp9YziyJuPubgr6/48i0f3VJH8HBrezLr6DPr 1173270664 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 331C7165B2; Wed, 7 Mar 2007 07:31:03 -0500 (EST) Message-ID: <45EEB086.3050409@FreeBSD.org> Date: Wed, 07 Mar 2007 12:31:02 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: "Bruce M. Simpson" References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> In-Reply-To: <45E6D70C.10104@FreeBSD.org> Content-Type: multipart/mixed; boundary="------------070900070803040605090309" Cc: Andre Oppermann , net@FreeBSD.org Subject: Re: Inconsistencies with IP_ONESBCAST and/or IP_SENDSRCADDR 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: Wed, 07 Mar 2007 12:31:05 -0000 This is a multi-part message in MIME format. --------------070900070803040605090309 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Bruce M. Simpson wrote: > > Dealing with dhclient is a separate issue -- here, something like > IP_SENDIF needs to be introduced, as we are truly in an 'ip > unnumbered' situation -- ie the ifnet MAY not yet have been assigned > an IPv4 address at all, and IP_SENDSRCADDR implies that you are source > routing in the local stack by passing the address of a numbered interface I have just committed a change in bms_netdev which enforces strict and better defined semantics for the IP_SENDSRCADDR option in udp_output(). This fits one of the main intended use cases of this option, e.g. a routing daemon, bound to 0.0.0.0 and a non-ephemeral port, which needs to explicitly override the hard-coded source selection policy in ip_output() to send an undirected broadcast on a numbered interface. It also fits a use case whereby a bound socket may wish to temporarily ask for default source selection policy by specifying INADDR_ANY, although this needs to be reviewed and tested further; I believe in_pcbbind_setup() will detect a collision in this case. We always obtain the inp_info write lock if IP_SENDSRCADDR was specified, in case we need to temporarily re-bind laddr. Pseudo-conditions as follows. IP_SENDSRCADDR with lport NOT BOUND is NOT OK. We should never try to persistently bind a socket which is not bound unless we are bind(2). IP_SENDSRCADDR with !INADDR_ANY when laddr is NOT BOUND is OK. It means override the source selection logic and use src.sin_addr instead. IP_SENDSRCADDR with INADDR_ANY when laddr is BOUND is OK; it It means override the bound address and use source selection logic instead. IP_SENDSRCADDR with INADDR_ANY when laddr is BOUND is OK. It means override the bound address and use source selection logic instead. IP_SENDSRCADDR with INADDR_ANY when laddr is NOT BOUND is NOT OK. It means no valid source is specified. Regards, BMS --------------070900070803040605090309 Content-Type: text/x-patch; name="ipsendsrcaddr.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ipsendsrcaddr.diff" --- //depot/vendor/freebsd/src/sys/netinet/udp_usrreq.c 2007/02/20 10:22:30 +++ //depot/user/bms/netdev/sys/netinet/udp_usrreq.c 2007/03/07 12:28:16 @@ -747,7 +747,8 @@ return (EMSGSIZE); } - src.sin_addr.s_addr = INADDR_ANY; + bzero(&src, sizeof(src)); + if (control != NULL) { /* * XXX: Currently, we assume all the optional information is @@ -777,12 +778,10 @@ error = EINVAL; break; } - bzero(&src, sizeof(src)); src.sin_family = AF_INET; src.sin_len = sizeof(src); - src.sin_port = inp->inp_lport; src.sin_addr = *(struct in_addr *)CMSG_DATA(cm); break; default: error = ENOPROTOOPT; break; @@ -797,7 +796,7 @@ return (error); } - if (src.sin_addr.s_addr != INADDR_ANY || addr != NULL) { + if (src.sin_family == AF_INET || addr != NULL) { INP_INFO_WLOCK(&udbinfo); unlock_udbinfo = 1; } else @@ -810,11 +809,20 @@ laddr = inp->inp_laddr; lport = inp->inp_lport; - if (src.sin_addr.s_addr != INADDR_ANY) { - if (lport == 0) { + + /* + * If the IP_SENDSRCADDR control message was specified, override the + * source address for this datagram. Its use is invalidated if the + * address thus specified is incomplete or clobbers other inpcbs. + */ + if (src.sin_family == AF_INET) { + if ((lport == 0) || + (laddr.s_addr == INADDR_ANY && + src.sin_addr.s_addr == INADDR_ANY)) { error = EINVAL; goto release; } + src.sin_port = lport; error = in_pcbbind_setup(inp, (struct sockaddr *)&src, &laddr.s_addr, &lport, td->td_ucred); if (error) --------------070900070803040605090309-- From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 14:52:45 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7C5E416A406 for ; Wed, 7 Mar 2007 14:52:45 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: from mail.bitdefender.com (ns.bitdefender.com [217.156.83.1]) by mx1.freebsd.org (Postfix) with ESMTP id B32D213C4A7 for ; Wed, 7 Mar 2007 14:52:44 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: (qmail 24486 invoked by uid 1010); 7 Mar 2007 16:26:02 +0200 Received: from unknown (HELO ?192.168.80.24?) (aarion@bitdefender.com@192.168.80.24) by mail.bitdefender.com with SMTP; 7 Mar 2007 16:26:00 +0200 From: Alexandru Arion To: freebsd-net@freebsd.org Content-Type: text/plain Organization: SOFTWIN Date: Wed, 07 Mar 2007 15:24:20 +0200 Message-Id: <1173273861.4982.8.camel@aarion> Mime-Version: 1.0 X-Mailer: Evolution 2.8.1 Content-Transfer-Encoding: 7bit X-BitDefender-Scanner: Clean, Agent: BitDefender qmail 2.0.0 on mail.bitdefender.com X-BitDefender-SpamStamp: v1, bayes score: 500, neunet score: 500, total: 0 X-BitDefender-Spam: No (0) Subject: SO_ACCEPTCONN equivalent 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: Wed, 07 Mar 2007 14:52:45 -0000 Hi, I'm rather new here, so excuses in advance if the question is out of topic. Is there an equivalent in FreeBSD to the SO_ACCEPTCONN option for getsockopt(), available in Linux? It doesn't actually has to be an option for getsockopt(), just a way to determine if a socket has been marked to accept connections with listen(). Thank you, Alex Arion From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 15:09:35 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 65A5F16A403 for ; Wed, 7 Mar 2007 15:09:35 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.190]) by mx1.freebsd.org (Postfix) with ESMTP id 01A3213C494 for ; Wed, 7 Mar 2007 15:09:32 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: by nf-out-0910.google.com with SMTP id k27so197626nfc for ; Wed, 07 Mar 2007 07:09:31 -0800 (PST) Received: by 10.78.150.7 with SMTP id x7mr992616hud.1173280171658; Wed, 07 Mar 2007 07:09:31 -0800 (PST) Received: by 10.78.71.19 with HTTP; Wed, 7 Mar 2007 07:09:31 -0800 (PST) Message-ID: Date: Wed, 7 Mar 2007 17:09:31 +0200 From: "Vlad GALU" To: freebsd-net@freebsd.org In-Reply-To: <1173273861.4982.8.camel@aarion> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <1173273861.4982.8.camel@aarion> Subject: Re: SO_ACCEPTCONN equivalent 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: Wed, 07 Mar 2007 15:09:35 -0000 On 3/7/07, Alexandru Arion wrote: > Hi, > > I'm rather new here, so excuses in advance if the question is out of > topic. > > Is there an equivalent in FreeBSD to the SO_ACCEPTCONN option for > getsockopt(), available in Linux? It doesn't actually has to be an > option for getsockopt(), just a way to determine if a socket has been > marked to accept connections with listen(). You can accept() on that socket, which should return EINVAL if the socket wasn't previously passed as an argument to listen(). For the afirmative case, make sure you use non-blocking sockets, otherwise accept() will block. > > Thank you, > Alex Arion > > > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > -- If it's there, and you can see it, it's real. If it's not there, and you can see it, it's virtual. If it's there, and you can't see it, it's transparent. If it's not there, and you can't see it, you erased it. From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 19:34:40 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A0CB416A40D for ; Wed, 7 Mar 2007 19:34:40 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 77F8C13C4A6 for ; Wed, 7 Mar 2007 19:34:40 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 0C7B91F620E; Wed, 7 Mar 2007 14:34:40 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Wed, 07 Mar 2007 14:34:40 -0500 X-Sasl-enc: EvMLH5LjgSoQgaOXz6ZZ9/2DGGpOetI7TvWGHWWZR0fr 1173296080 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 89561190D7; Wed, 7 Mar 2007 14:34:38 -0500 (EST) Message-ID: <45EF13CD.8020800@FreeBSD.org> Date: Wed, 07 Mar 2007 19:34:37 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Alexandru Arion References: <1173273861.4982.8.camel@aarion> In-Reply-To: <1173273861.4982.8.camel@aarion> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Wed, 07 Mar 2007 19:34:40 -0000 Alexandru Arion wrote: > Is there an equivalent in FreeBSD to the SO_ACCEPTCONN option for > getsockopt(), available in Linux? It doesn't actually has to be an > option for getsockopt(), just a way to determine if a socket has been > marked to accept connections with listen(). > SO_ACCEPTCONN appears to be in FreeBSD 6.2 and CURRENT already. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 20:38:24 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F0EED16A405 for ; Wed, 7 Mar 2007 20:38:24 +0000 (UTC) (envelope-from corsmith@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.226]) by mx1.freebsd.org (Postfix) with ESMTP id 964B513C4A8 for ; Wed, 7 Mar 2007 20:38:24 +0000 (UTC) (envelope-from corsmith@gmail.com) Received: by wr-out-0506.google.com with SMTP id 71so459435wri for ; Wed, 07 Mar 2007 12:38:23 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=Ww++klQT0hJ0g9DwtgOPa3rddhU5Mgpi71T7PBuIppoJlrvgXo3GZmmEGY+6PPfMkFQ9y4ZIh7QFlMUeAqxo/tBiyhMF5mF0yDwR5kjZ8B7SboiPatp55KVOGJb1H6EL3yZFLf0zsCN05Qo9nPRaYfPFTIZVUNW1KsvN1GM0Syc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=UHXWQbZ19A+Ks1WEkM2jG3ax5iOG8+kwpYIYhqMrtJZhS/cYubnPYq3BdKKdeLkRwt5Z4dRINRE90PBpwUeo59H+lWdqFV4R94BoRFnISocPKnvspHvUEXDoAJn9WIiBAwPCGO+XJvEhk5KeHNTTC0Ma6uSf4UheWGuAkmbuypE= Received: by 10.114.195.19 with SMTP id s19mr2331626waf.1173297975804; Wed, 07 Mar 2007 12:06:15 -0800 (PST) Received: by 10.114.73.19 with HTTP; Wed, 7 Mar 2007 12:06:10 -0800 (PST) Message-ID: <8061fbee0703071206w58c1985fl78d7110a040fa144@mail.gmail.com> Date: Wed, 7 Mar 2007 15:06:10 -0500 From: "Corey Smith" To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: 802.1q bridged trunk with STP 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: Wed, 07 Mar 2007 20:38:25 -0000 Please CC: me as I am off list. I want to be able to create an 802.1q bridged trunk. This is nice if you want layer 1 and 2 redundancy on an arbitrary number of logical networks with only two physical network interfaces. Here is try1: ifconfig bridge18 destroy ifconfig bridge19 destroy ifconfig vlan18 destroy ifconfig vlan19 destroy ifconfig vlan118 destroy ifconfig vlan119 destroy ifconfig vlan18 create ifconfig vlan19 create ifconfig vlan118 create ifconfig vlan119 create ifconfig vlan18 vlan 18 vlandev bge0 up ifconfig vlan19 vlan 19 vlandev bge0 up ifconfig vlan118 vlan 18 vlandev bge1 up ifconfig vlan119 vlan 19 vlandev bge1 up ifconfig bridge18 create ifconfig bridge19 create ifconfig bridge18 inet 192.168.1.50/24 addm vlan18 stp vlan18 addm vlan118 \ stp vlan118 up ifconfig: unable to set bridge flags: Invalid argument This works if you don't enable stp but gives the error above otherwise. Without using spanning tree you can't actually plug it into your switch. Instead of running STP over the vlan interfaces I decided to try running STP on the real interfaces and then use the bridge interfaces as the vlan vlandev. Try2: ifconfig vlan18 destroy ifconfig bridge1 destroy ifconfig vlan18 create ifconfig bridge1 create ifconfig bridge1 addm bge0 stp bge0 addm bge1 stp bge1 up ifconfig vlan18 inet 192.168.1.50/24 vlan 18 vlandev bridge1 up ifconfig: SIOCSETVLAN: Protocol not supported Still no dice. I think that this method is the one that is actually supported by Cisco switches and has a cleaner config Is there a way to accomplish this task using FreeBSD 6.2-RELEASE ? -Corey Smith From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 20:53:15 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4069E16A402 for ; Wed, 7 Mar 2007 20:53:15 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from heff.fud.org.nz (203-109-251-39.static.bliink.ihug.co.nz [203.109.251.39]) by mx1.freebsd.org (Postfix) with ESMTP id CF4EC13C4B5 for ; Wed, 7 Mar 2007 20:53:14 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: by heff.fud.org.nz (Postfix, from userid 1001) id A40D01CC59; Thu, 8 Mar 2007 09:53:11 +1300 (NZDT) Date: Thu, 8 Mar 2007 09:53:11 +1300 From: Andrew Thompson To: Corey Smith Message-ID: <20070307205311.GB54828@heff.fud.org.nz> References: <8061fbee0703071206w58c1985fl78d7110a040fa144@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8061fbee0703071206w58c1985fl78d7110a040fa144@mail.gmail.com> User-Agent: Mutt/1.5.13 (2006-08-11) Cc: freebsd-net@freebsd.org Subject: Re: 802.1q bridged trunk with STP 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: Wed, 07 Mar 2007 20:53:15 -0000 On Wed, Mar 07, 2007 at 03:06:10PM -0500, Corey Smith wrote: > Please CC: me as I am off list. > > I want to be able to create an 802.1q bridged trunk. This is nice if > you want layer 1 and 2 redundancy on an arbitrary number of logical > networks with only two physical network interfaces. > > ifconfig bridge18 inet 192.168.1.50/24 addm vlan18 stp vlan18 addm vlan118 \ > stp vlan118 up > ifconfig: unable to set bridge flags: Invalid argument > > This works if you don't enable stp but gives the error above > otherwise. Without using spanning tree you can't actually plug it > into your switch. I believe that MST support is needed in order to use spanning tree with vlans but do be honest I havnt looked too far into it. The stp code in 6.2-RELEASE explicitly does not allow stp to be enabled on a vlan and people who have removed this check have reported that it does indeed not work. HEAD and 6-STABLE both now have RSTP support in it and MST is an extension of RSTP so could be added with some work. I plan to do this sometime this year but you are welcome to kick it off. cheers, Andrew From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 21:02:56 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B478716A501; Wed, 7 Mar 2007 21:02:56 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from heff.fud.org.nz (203-109-251-39.static.bliink.ihug.co.nz [203.109.251.39]) by mx1.freebsd.org (Postfix) with ESMTP id 32DE713C4AA; Wed, 7 Mar 2007 21:02:55 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: by heff.fud.org.nz (Postfix, from userid 1001) id ADB201CC5A; Thu, 8 Mar 2007 10:02:54 +1300 (NZDT) Date: Thu, 8 Mar 2007 10:02:54 +1300 From: Andrew Thompson To: Roman Kurakin Message-ID: <20070307210254.GD54828@heff.fud.org.nz> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EDA348.3030309@inse.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <45EDA348.3030309@inse.ru> User-Agent: Mutt/1.5.13 (2006-08-11) Cc: rik@FreeBSD.org, andre@FreeBSD.org, freebsd-net@freebsd.org, bms@FreeBSD.org, glebius@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Wed, 07 Mar 2007 21:02:56 -0000 On Tue, Mar 06, 2007 at 08:22:16PM +0300, Roman Kurakin wrote: > Ok, since no one want to provide an explanation I'll to do it myself. ... > I suggest to fix this problem in the other way, by checking if the > physical interface > is the dst interface by MAC. Eq if we got packet from Ci, it will be > market as received > from Ci, not from Cj. Yes it will add double checking for this interface > it is not the > dst with some probability, but will optimize the case the dst is the > current one cause > we will not check the list. This will keep the old behaviour eq case 1 > and will do the > same trick for cases like VLANs. Here my variant of the patch: I think this is probably the best way to do it. I have only been loosely following this thread due to other stuff going on. > > + /* Give a chance for ifp at first priority. This will help in case > we > + * the packet comes through the interface with VLAN's and the same > + * MACs on several interfaces in a bridge. Also will save some > circles > + * in case dst interface is the physical input interface (eq ifp). > + */ > + if (ifp->if_type == IFT_GIF ^^^^^^^^^^^^^^^^^^^^^^^ is this check right? > + && (memcmp(IF_LLADDR(bif2->bif_ifp), eh->ether_dhost, > + ETHER_ADDR_LEN) == 0 > +#ifdef DEV_CARP > + || (bif2->bif_ifp->if_carp > + && carp_forus(bif2->bif_ifp->if_carp, eh->ether_dhost)) > +#endif > + )) { > + if (bif->bif_flags & IFBIF_LEARNING) > + (void) bridge_rtupdate(sc, > + eh->ether_shost, bif, 0, IFBAF_DYNAMIC); > + m->m_pkthdr.rcvif = ifp; > + BRIDGE_UNLOCK(sc); > + return (m); > + } I will be keen to see your final patch. Andrew From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 22:14:41 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 295CF16A401 for ; Wed, 7 Mar 2007 22:14:41 +0000 (UTC) (envelope-from rmkml@free.fr) Received: from postfix1-g20.free.fr (postfix1-g20.free.fr [212.27.60.42]) by mx1.freebsd.org (Postfix) with ESMTP id CF71613C4A8 for ; Wed, 7 Mar 2007 22:14:40 +0000 (UTC) (envelope-from rmkml@free.fr) Received: from smtp4-g19.free.fr (smtp4-g19.free.fr [212.27.42.30]) by postfix1-g20.free.fr (Postfix) with ESMTP id 16B69B21376 for ; Wed, 7 Mar 2007 22:42:27 +0100 (CET) Received: from [192.168.1.2] (www.crusoe-researches.com [82.238.92.71]) by smtp4-g19.free.fr (Postfix) with ESMTP id A5AA4674AD for ; Wed, 7 Mar 2007 22:42:26 +0100 (CET) Date: Wed, 7 Mar 2007 22:42:42 +0100 (CET) From: rmkml To: freebsd-net@freebsd.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Subject: ifconfig bridge0 without module not work ? 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: Wed, 07 Mar 2007 22:14:41 -0000 Hi, I have disabled/removed module on kernel, anyone ok, but when I create bridge0 : ifconfig bridge0 create ifconfig: SIOCIFCREATE: Invalid argument I just added "options BRIDGE" on my kernel conf. uname -a : 6.2-RELEASE ok if I add interface manually and bridge work : sysctl -w net.link.ether.bridge_cfg=em0,em1 but ifconfig not view bridge0 ! Thx for tips/help Regards Rmkml From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 22:22:24 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CAC6316A414 for ; Wed, 7 Mar 2007 22:22:24 +0000 (UTC) (envelope-from joe@joeholden.co.uk) Received: from gabriella.ber.rewt.org.uk (gabriella.ber.rewt.org.uk [87.106.72.109]) by mx1.freebsd.org (Postfix) with ESMTP id 5F5B413C4C8 for ; Wed, 7 Mar 2007 22:22:24 +0000 (UTC) (envelope-from joe@joeholden.co.uk) Received: from localhost (localhost [127.0.0.1]) by gabriella.ber.rewt.org.uk (Postfix) with ESMTP id 6A2562DE37; Wed, 7 Mar 2007 22:22:24 +0000 (GMT) X-Virus-Scanned: amavisd-new at gabriella.ber.rewt.org.uk Received: from gabriella.ber.rewt.org.uk ([127.0.0.1]) by localhost (gabriella.ber.rewt.org.uk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vJYIsL1EiQtG; Wed, 7 Mar 2007 22:22:20 +0000 (GMT) Received: from [192.168.10.147] (dsl172-67.as6911.net [62.84.172.67]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by gabriella.ber.rewt.org.uk (Postfix) with ESMTP id 9D9022DE2A; Wed, 7 Mar 2007 22:22:19 +0000 (GMT) Message-ID: <45EF3B1E.5050106@joeholden.co.uk> Date: Wed, 07 Mar 2007 22:22:22 +0000 From: Joe Holden User-Agent: Thunderbird 1.5.0.10 (Windows/20070221) MIME-Version: 1.0 To: rmkml References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: ifconfig bridge0 without module not work ? 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: Wed, 07 Mar 2007 22:22:24 -0000 rmkml wrote: > Hi, > I have disabled/removed module on kernel, anyone ok, > but when I create bridge0 : > ifconfig bridge0 create > ifconfig: SIOCIFCREATE: Invalid argument > I just added "options BRIDGE" on my kernel conf. > uname -a : 6.2-RELEASE > ok if I add interface manually and bridge work : > sysctl -w net.link.ether.bridge_cfg=em0,em1 > but ifconfig not view bridge0 ! > Thx for tips/help > Regards > Rmkml > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" options BRIDGE != if_bridge. You will either want to kldload if_bridge, and ifconfig bridge0 create - although this automatically loaded if_bridge on my machine (without options BRIDGE) configured. Ta, Joe From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 22:23:44 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 800F716A403 for ; Wed, 7 Mar 2007 22:23:44 +0000 (UTC) (envelope-from miroslav@svishtov.net) Received: from mail.svishtov.net (mail.svishtov.net [85.217.192.3]) by mx1.freebsd.org (Postfix) with ESMTP id C6CAD13C4B4 for ; Wed, 7 Mar 2007 22:23:43 +0000 (UTC) (envelope-from miroslav@svishtov.net) X-Spam-Status: No, hits=4.9 required=7.5 tests=AWL: -0.556,BAYES_99: 4.07,HTML_40_50: 0.052, HTML_MESSAGE: 0.001,RCVD_NUMERIC_HELO: 1.348 X-Spam-Level: **** Received: from 85.217.218.180 ([85.217.218.180]) by mail.svishtov.net for miroslav@svishtov.net; Thu, 8 Mar 2007 00:23:51 +0200 From: Miroslav Slavkov To: freebsd-net@freebsd.org In-Reply-To: Message-ID: <20070307222351.d1ff7c91@mail.svishtov.net> Date: Thu, 08 Mar 2007 00:23:51 +0200 X-Mailer: Kerio MailServer 6.1.1 WebMail X-User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; bg; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Re: ifconfig bridge0 without module not work ? 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: Wed, 07 Mar 2007 22:23:44 -0000 man if_bridge options BRIDGE is different bridge implementation to use if_bridge: kldload if_bridge (or add it to kernel config or /boot/loader.conf) ifconfig bridge0 create ... cheers _____ From: rmkml [mailto:rmkml@free.fr] To: freebsd-net@freebsd.org Sent: Wed, 07 Mar 2007 23:42:42 +0200 Subject: ifconfig bridge0 without module not work ? Hi, I have disabled/removed module on kernel, anyone ok, but when I create bridge0 : ifconfig bridge0 create ifconfig: SIOCIFCREATE: Invalid argument I just added "options BRIDGE" on my kernel conf. uname -a : 6.2-RELEASE ok if I add interface manually and bridge work : sysctl -w net.link.ether.bridge_cfg=em0,em1 but ifconfig not view bridge0 ! Thx for tips/help Regards Rmkml _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" From owner-freebsd-net@FreeBSD.ORG Wed Mar 7 22:29:36 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 70BA016A403 for ; Wed, 7 Mar 2007 22:29:36 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from heff.fud.org.nz (203-109-251-39.static.bliink.ihug.co.nz [203.109.251.39]) by mx1.freebsd.org (Postfix) with ESMTP id 0E5E913C4AC for ; Wed, 7 Mar 2007 22:29:36 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: by heff.fud.org.nz (Postfix, from userid 1001) id B29E51CC59; Thu, 8 Mar 2007 11:29:34 +1300 (NZDT) Date: Thu, 8 Mar 2007 11:29:34 +1300 From: Andrew Thompson To: rmkml Message-ID: <20070307222934.GF54828@heff.fud.org.nz> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.13 (2006-08-11) Cc: freebsd-net@freebsd.org Subject: Re: ifconfig bridge0 without module not work ? 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: Wed, 07 Mar 2007 22:29:36 -0000 On Wed, Mar 07, 2007 at 10:42:42PM +0100, rmkml wrote: > Hi, > I have disabled/removed module on kernel, anyone ok, > but when I create bridge0 : > ifconfig bridge0 create > ifconfig: SIOCIFCREATE: Invalid argument > I just added "options BRIDGE" on my kernel conf. > uname -a : 6.2-RELEASE > ok if I add interface manually and bridge work : > sysctl -w net.link.ether.bridge_cfg=em0,em1 > but ifconfig not view bridge0 ! You are mixing up the two bridge drivers. There is the old bridge(4) which is the old you have compiled in and this uses the sysctl interfac e to configure it. Then there is the new bridge driver called if_bridge(4), named as such since 'bridge' was taken. This is the one that uses cloned interfaces which show up in ifconfig and seems to be what you are after. In your kernel config just change "options BRIDGE" to "device if_bridge" and it should all work fine. You can see the differences in each man page. cheers, Andrew From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 02:36:12 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 318A716A400 for ; Thu, 8 Mar 2007 02:36:12 +0000 (UTC) (envelope-from Darren.Reed@Sun.COM) Received: from sineb-mail-1.sun.com (sineb-mail-1.sun.com [192.18.19.6]) by mx1.freebsd.org (Postfix) with ESMTP id A798813C4B5 for ; Thu, 8 Mar 2007 02:36:11 +0000 (UTC) (envelope-from Darren.Reed@Sun.COM) Received: from fe-apac-06.sun.com (fe-apac-06.sun.com [192.18.19.177] (may be forged)) by sineb-mail-1.sun.com (8.13.6+Sun/8.12.9) with ESMTP id l282Gfih004047 for ; Thu, 8 Mar 2007 10:16:45 +0800 (SGT) Received: from conversion-daemon.mail-apac.sun.com by mail-apac.sun.com (Sun Java System Messaging Server 6.2-6.01 (built Apr 3 2006)) id <0JEK00F01BGOBL00@mail-apac.sun.com> (original mail from Darren.Reed@Sun.COM) for freebsd-net@freebsd.org; Thu, 08 Mar 2007 10:16:41 +0800 (SGT) Received: from [129.146.106.55] by mail-apac.sun.com (Sun Java System Messaging Server 6.2-6.01 (built Apr 3 2006)) with ESMTPSA id <0JEK00LU6BNRXXZ7@mail-apac.sun.com> for freebsd-net@freebsd.org; Thu, 08 Mar 2007 10:16:40 +0800 (SGT) Date: Wed, 07 Mar 2007 18:16:34 -0800 From: Darren.Reed@Sun.COM Sender: Darren.Reed@Sun.COM To: freebsd-net@freebsd.org Message-id: <45EF7202.20107@Sun.COM> MIME-version: 1.0 Content-type: text/plain; format=flowed; charset=ISO-8859-1 Content-transfer-encoding: 7BIT X-Accept-Language: en-us, en User-Agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.7) Gecko/20060120 Subject: Designing a library interface for ipfilter... 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: Thu, 08 Mar 2007 02:36:12 -0000 A project I'm looking to do in my spare time at Sun is to create a library that provides access to some of the more useful ioctls supported by IPFilter. The problem with relying on ioctls is that if the data structures passed through change then often everything needs to be recompiled. I currently have no plans to rewrite the IPFilter tools to use this API, rather, the parts of the API that I'm designing now are where 3rd party people have said "we'd like to dow this with our applications." At some point it will be possible to write the tools to use it, but that isn't the priority here. For obvious reasons I won't be doing this work in FreeBSD but there are some paths for someone else at FreeBSD to: - import all of the code "as is" under src/dist/libnpf (CDDL'd) - someone else from FreeBSD writes it all from scratch - the front end gets written by someone else at FreeBSD but FreeBSD imports the ipfilter bits from opensolaris (CDDL allows this.) The "someone else" from FreeBSD will get a spec of some sort to code against. If they were prepared to help write and/or review the spec, even better. Additionally, I'd like to hear if anyone would be willing to at least do the backend work for both ipfw and pf on FreeBSD. I'll also be posting a similar email to the NetBSD lists, asking for input/thoughts there too. Darren From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 09:17:38 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0503616A404 for ; Thu, 8 Mar 2007 09:17:38 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: from mail.bitdefender.com (ns.bitdefender.com [217.156.83.1]) by mx1.freebsd.org (Postfix) with ESMTP id 3A41A13C4A5 for ; Thu, 8 Mar 2007 09:17:36 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: (qmail 11204 invoked by uid 1010); 8 Mar 2007 11:17:35 +0200 Received: from unknown (HELO ?192.168.80.24?) (aarion@bitdefender.com@192.168.80.24) by mail.bitdefender.com with SMTP; 8 Mar 2007 11:17:24 +0200 From: Alexandru Arion To: freebsd-net@freebsd.org In-Reply-To: <45EF13CD.8020800@FreeBSD.org> References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> Content-Type: text/plain Organization: SOFTWIN Date: Thu, 08 Mar 2007 11:15:42 +0200 Message-Id: <1173345342.4957.13.camel@aarion> Mime-Version: 1.0 X-Mailer: Evolution 2.8.1 Content-Transfer-Encoding: 7bit X-BitDefender-Scanner: Clean, Agent: BitDefender qmail 2.0.0 on mail.bitdefender.com X-BitDefender-SpamStamp: v1, bayes score: 500, neunet score: 500, total: 0 X-BitDefender-Spam: No (0) Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 09:17:38 -0000 On Wed, 2007-03-07 at 19:34 +0000, Bruce M. Simpson wrote: > Alexandru Arion wrote: > > Is there an equivalent in FreeBSD to the SO_ACCEPTCONN option for > > getsockopt(), available in Linux? It doesn't actually has to be an > > option for getsockopt(), just a way to determine if a socket has been > > marked to accept connections with listen(). > > > SO_ACCEPTCONN appears to be in FreeBSD 6.2 and CURRENT already. > Thanks for both suggestions. Since I'll support version 5.4 and up, this leaves me to using the workaround implied by calling accept and checking the returned value, for now. AlexA > Regards, > BMS > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 11:36:49 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8AB1A16A402 for ; Thu, 8 Mar 2007 11:36:49 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 60ECF13C4A8 for ; Thu, 8 Mar 2007 11:36:49 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 8817F1F6931; Thu, 8 Mar 2007 06:36:19 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Thu, 08 Mar 2007 06:36:19 -0500 X-Sasl-enc: 8K0YuUalMbsQUeHW3t0uZrW7E7kCQZx5KcfJ+1gSIy5q 1173353779 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 5603B1907D; Thu, 8 Mar 2007 06:36:18 -0500 (EST) Message-ID: <45EFF531.5080507@FreeBSD.org> Date: Thu, 08 Mar 2007 11:36:17 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Alexandru Arion References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> In-Reply-To: <1173345342.4957.13.camel@aarion> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 11:36:49 -0000 Alexandru Arion wrote: > > Thanks for both suggestions. Since I'll support version 5.4 and up, this > leaves me to using the workaround implied by calling accept and checking > the returned value, for now. > Erm. It looks like it's implemented in 5.4 as well, although you might have mentioned in your original mail you were working with a legacy version of FreeBSD. :^) http://fxr.watson.org/fxr/ident?v=RELENG54&i=SO_ACCEPTCONN BMS From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 12:12:56 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 62F1416A400 for ; Thu, 8 Mar 2007 12:12:56 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.191]) by mx1.freebsd.org (Postfix) with ESMTP id EFB2213C471 for ; Thu, 8 Mar 2007 12:12:55 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: by nf-out-0910.google.com with SMTP id k27so555141nfc for ; Thu, 08 Mar 2007 04:12:54 -0800 (PST) Received: by 10.78.164.9 with SMTP id m9mr33945hue.1173355974395; Thu, 08 Mar 2007 04:12:54 -0800 (PST) Received: by 10.78.71.19 with HTTP; Thu, 8 Mar 2007 04:12:54 -0800 (PST) Message-ID: Date: Thu, 8 Mar 2007 14:12:54 +0200 From: "Vlad GALU" To: "Bruce M. Simpson" In-Reply-To: <45EFF531.5080507@FreeBSD.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_195539_29209309.1173355974349" References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> <45EFF531.5080507@FreeBSD.org> Cc: Alexandru Arion , freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 12:12:56 -0000 ------=_Part_195539_29209309.1173355974349 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 3/8/07, Bruce M. Simpson wrote: > Alexandru Arion wrote: > > > > Thanks for both suggestions. Since I'll support version 5.4 and up, this > > leaves me to using the workaround implied by calling accept and checking > > the returned value, for now. > > > Erm. It looks like it's implemented in 5.4 as well, although you might > have mentioned in your original mail you were working with a legacy > version of FreeBSD. :^) > > http://fxr.watson.org/fxr/ident?v=RELENG54&i=SO_ACCEPTCONN Manpage diff attached. > BMS > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > -- If it's there, and you can see it, it's real. If it's not there, and you can see it, it's virtual. If it's there, and you can't see it, it's transparent. If it's not there, and you can't see it, you erased it. ------=_Part_195539_29209309.1173355974349 Content-Type: application/octet-stream; name=getsockopt.2.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_ez15u6xh Content-Disposition: attachment; filename="getsockopt.2.diff" MTUxYTE1Mgo+IC5JdCBEdiBTT19BQ0NFUFRDT05OIFRhICJjaGVja3MgaWYgZ2l2ZW4gc29ja2V0 IGlzIGluIGxpc3RlbmluZyBtb2RlIgoxNzdhMTc5LDE4Mgo+IAo+IC5EdiBTT19BQ0NFUFRDT05O Cj4gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNvY2tldCBpcyBpbiBsaXN0ZW5pbmcgbW9kZSBvciBu b3QKPiAK ------=_Part_195539_29209309.1173355974349-- From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 12:47:50 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ABE5F16A408 for ; Thu, 8 Mar 2007 12:47:50 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 8080B13C491 for ; Thu, 8 Mar 2007 12:47:50 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 10D7E1F653D; Thu, 8 Mar 2007 07:47:50 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Thu, 08 Mar 2007 07:47:50 -0500 X-Sasl-enc: VUA0p05X4ss3A4bRj4/qK/ynXqYCtT6Z/YlcH660cy0S 1173358070 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 7A94719EE8; Thu, 8 Mar 2007 07:47:49 -0500 (EST) Message-ID: <45F005F3.20908@FreeBSD.org> Date: Thu, 08 Mar 2007 12:47:47 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Vlad GALU References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> <45EFF531.5080507@FreeBSD.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Alexandru Arion , freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 12:47:50 -0000 Vlad GALU wrote: > >> >> Erm. It looks like it's implemented in 5.4 as well, although you might >> have mentioned in your original mail you were working with a legacy >> version of FreeBSD. :^) >> >> http://fxr.watson.org/fxr/ident?v=RELENG54&i=SO_ACCEPTCONN > > Manpage diff attached. Mailman ate your homework. :/ BMS From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 12:57:29 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A1C6E16A404; Thu, 8 Mar 2007 12:57:29 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 7451113C471; Thu, 8 Mar 2007 12:57:29 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 043E71F6809; Thu, 8 Mar 2007 07:57:27 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Thu, 08 Mar 2007 07:57:27 -0500 X-Sasl-enc: dXjENa6OCPPECSQ7J4BSgiOcpY1wPDE2UW5FN5a/d50L 1173358647 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 829F6146A5; Thu, 8 Mar 2007 07:57:26 -0500 (EST) Message-ID: <45F00835.8060001@FreeBSD.org> Date: Thu, 08 Mar 2007 12:57:25 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: "Bruce M. Simpson" References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> <45EFF531.5080507@FreeBSD.org> <45F005F3.20908@FreeBSD.org> In-Reply-To: <45F005F3.20908@FreeBSD.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Alexandru Arion , Vlad GALU , freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 12:57:29 -0000 Bruce M. Simpson wrote: > >> >> Manpage diff attached. > Mailman ate your homework. :/ My bad. Committed. BMS From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 13:20:55 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 59E3E16A404 for ; Thu, 8 Mar 2007 13:20:55 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: from mail.bitdefender.com (ns.bitdefender.com [217.156.83.1]) by mx1.freebsd.org (Postfix) with ESMTP id 85E6013C4AC for ; Thu, 8 Mar 2007 13:20:54 +0000 (UTC) (envelope-from aarion@bitdefender.com) Received: (qmail 7933 invoked by uid 1010); 8 Mar 2007 15:20:52 +0200 Received: from unknown (HELO ?192.168.80.24?) (aarion@bitdefender.com@192.168.80.24) by mail.bitdefender.com with SMTP; 8 Mar 2007 15:20:52 +0200 From: Alexandru Arion To: "Bruce M. Simpson" In-Reply-To: <45EFF531.5080507@FreeBSD.org> References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> <45EFF531.5080507@FreeBSD.org> Content-Type: text/plain Organization: SOFTWIN Date: Thu, 08 Mar 2007 15:19:12 +0200 Message-Id: <1173359952.4957.29.camel@aarion> Mime-Version: 1.0 X-Mailer: Evolution 2.8.1 Content-Transfer-Encoding: 7bit X-BitDefender-Scanner: Clean, Agent: BitDefender qmail 2.0.0 on mail.bitdefender.com X-BitDefender-SpamStamp: v1, bayes score: 500, neunet score: 500, total: 0 X-BitDefender-Spam: No (0) Cc: freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 13:20:55 -0000 On Thu, 2007-03-08 at 11:36 +0000, Bruce M. Simpson wrote: > Alexandru Arion wrote: > > > > Thanks for both suggestions. Since I'll support version 5.4 and up, this > > leaves me to using the workaround implied by calling accept and checking > > the returned value, for now. > > > Erm. It looks like it's implemented in 5.4 as well, although you might > have mentioned in your original mail you were working with a legacy > version of FreeBSD. :^) > Tried it on fresh install of 5.4: compiled the source locally, run, got error "Protocol not available". Same code works on Linux. By replacing SO_ACCEPTCONN with SO_REUSEADDR, or any other option that appears in the manual page for 5.4, the program works correctly. Bruce, is there something I'm missing? Thanks, Alex. > http://fxr.watson.org/fxr/ident?v=RELENG54&i=SO_ACCEPTCONN > > BMS > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 13:23:49 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 137F216A406 for ; Thu, 8 Mar 2007 13:23:49 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id DCACF13C4B4 for ; Thu, 8 Mar 2007 13:23:48 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 6D1B91F65AF; Thu, 8 Mar 2007 08:23:48 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by out1.internal (MEProxy); Thu, 08 Mar 2007 08:23:48 -0500 X-Sasl-enc: X8NmRbRS/0Pm48c0Jo9vhjXztUbIc9ChtqkHv2tVemHf 1173360228 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id 4BD2F1B7EE; Thu, 8 Mar 2007 08:23:48 -0500 (EST) Message-ID: <45F00E62.4020503@FreeBSD.org> Date: Thu, 08 Mar 2007 13:23:46 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Alexandru Arion References: <1173273861.4982.8.camel@aarion> <45EF13CD.8020800@FreeBSD.org> <1173345342.4957.13.camel@aarion> <45EFF531.5080507@FreeBSD.org> <1173359952.4957.29.camel@aarion> In-Reply-To: <1173359952.4957.29.camel@aarion> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: SO_ACCEPTCONN equivalent 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: Thu, 08 Mar 2007 13:23:49 -0000 Alexandru Arion wrote: > Tried it on fresh install of 5.4: compiled the source locally, run, got > error "Protocol not available". Same code works on Linux. > > By replacing SO_ACCEPTCONN with SO_REUSEADDR, or any other option that > appears in the manual page for 5.4, the program works correctly. > > Bruce, is there something I'm missing? > There was a thread about this on a mailing list in the past from Robert Watson who was concerned introducing the option might introduce race conditions; please see the archives for this. If SO_ACCEPTCONN does not work for you, please consider submitting a regression test for it e.g. src/tools/regression/sockets/acceptconn so that someone can pick up on this. Thanks! BMS From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 15:31:24 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7E6A116A400 for ; Thu, 8 Mar 2007 15:31:24 +0000 (UTC) (envelope-from corsmith@gmail.com) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.169]) by mx1.freebsd.org (Postfix) with ESMTP id 095C813C48E for ; Thu, 8 Mar 2007 15:31:23 +0000 (UTC) (envelope-from corsmith@gmail.com) Received: by ug-out-1314.google.com with SMTP id 71so925057ugh for ; Thu, 08 Mar 2007 07:31:22 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=uJwasihPofh6PtmAzd9vy6WRj2SawitSP03Co/97zeuvaYPqB+W710W3qq3u+AriDsRLgTCt+rC2KkkoIc6xfdItFykUTztUVQCS5mGazf1TtXj0W7Z9n0Ed8cA44XLFHnxoVDUFWsAm4Gfw1maUNY1S+W4y+R5P8wZMB/gkjzA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=B33pGx+CONqn6idlvypuW4Rb6Lo80vwMweLYWS6gyb9X3Vs8qXlRDutQgB5CeXdaiuugYFpq/mrj+cL6DPGz1gNDmUdxRkS/G0X0sqP8nhFAIbS/3on2RotpgYUHozHq0eWYAj+WaxBCPbzyvaTNCRpPHfyUt0/5geCjB4tP7MU= Received: by 10.114.126.1 with SMTP id y1mr190187wac.1173367881902; Thu, 08 Mar 2007 07:31:21 -0800 (PST) Received: by 10.114.73.19 with HTTP; Thu, 8 Mar 2007 07:31:21 -0800 (PST) Message-ID: <8061fbee0703080731x7fd70eabye73d10eeb9f15ab6@mail.gmail.com> Date: Thu, 8 Mar 2007 10:31:21 -0500 From: "Corey Smith" To: "Andrew Thompson" In-Reply-To: <20070307205311.GB54828@heff.fud.org.nz> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <8061fbee0703071206w58c1985fl78d7110a040fa144@mail.gmail.com> <20070307205311.GB54828@heff.fud.org.nz> Cc: freebsd-net@freebsd.org Subject: Re: 802.1q bridged trunk with STP 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: Thu, 08 Mar 2007 15:31:24 -0000 On 3/7/07, Andrew Thompson wrote: > The stp code in > 6.2-RELEASE explicitly does not allow stp to be enabled > on a vlan and people who have removed this check have reported that it > does indeed not work. Is there a way to allow a bridge to be a vlandev ? For my environment it would be sufficient to run STP on the untagged physical interface so the vlan interfaces would only send and receive on the forwarding member. -Corey Smith From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 15:57:31 2007 Return-Path: X-Original-To: net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B352116A400 for ; Thu, 8 Mar 2007 15:57:31 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id 8867713C461 for ; Thu, 8 Mar 2007 15:57:31 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id E35EE1F55AB for ; Thu, 8 Mar 2007 10:57:30 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Thu, 08 Mar 2007 10:57:30 -0500 X-Sasl-enc: bOAv+TKFpGlU4KmtllCuk/HQ1ncwuWslUpFNAdTkklhy 1173369451 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id E59FB18CF0 for ; Thu, 8 Mar 2007 10:57:30 -0500 (EST) Message-ID: <45F03269.7050705@FreeBSD.org> Date: Thu, 08 Mar 2007 15:57:29 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: net@FreeBSD.org References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> <45EEB086.3050409@FreeBSD.org> In-Reply-To: <45EEB086.3050409@FreeBSD.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Subject: Re: Inconsistencies with IP_ONESBCAST and/or IP_SENDSRCADDR 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: Thu, 08 Mar 2007 15:57:31 -0000 Bruce M. Simpson wrote: > I have just committed a change in bms_netdev which enforces strict > and better defined semantics for the IP_SENDSRCADDR option in > udp_output(). > I have just committed this change in -CURRENT. After testing it with 'ipbroadcast', it looks good apart from sockets which are already laddr bound. This is forbidden by in_pcbbind_setup(). The same caveats apply -- it might collide with an already bound inpcb. It is OK for code to choose any source address configured on the box as this will be needed to override source selection come ECMP. If someone else steps up to make it work when socket is laddr bound, well and cool. I now consider it 'fit for purpose'. I'm satisfied with this for now. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 22:43:36 2007 Return-Path: X-Original-To: net@freebsd.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6A57B16A400 for ; Thu, 8 Mar 2007 22:43:36 +0000 (UTC) (envelope-from david.baukus@us.fujitsu.com) Received: from fncnmp04.fnc.fujitsu.com (fncnmp04.fnc.fujitsu.com [168.127.0.57]) by mx1.freebsd.org (Postfix) with ESMTP id 352C713C481 for ; Thu, 8 Mar 2007 22:43:36 +0000 (UTC) (envelope-from david.baukus@us.fujitsu.com) Received: from unknown (HELO nova.tx.fnc.fujitsu.com) ([167.254.252.121]) by fncnmp04.fnc.fujitsu.com with ESMTP; 08 Mar 2007 16:33:07 -0600 X-IronPort-AV: i="4.14,264,1170655200"; d="scan'208"; a="67422211:sNHT20839556" Received: from nomad.tx.fnc.fujitsu.com (localhost [127.0.0.1]) by nova.tx.fnc.fujitsu.com (8.13.7+Sun/8.13.7) with ESMTP id l28MX6og007422 for ; Thu, 8 Mar 2007 16:33:06 -0600 (CST) Received: from tdd2172.tddeng00.fnts.com (tdd2172.tddeng00.fnts.com [167.254.250.128]) by nomad.tx.fnc.fujitsu.com (8.13.7+Sun/8.13.7) with ESMTP id l28MX1Fi013577 for ; Thu, 8 Mar 2007 16:33:06 -0600 (CST) Received: from [127.0.0.1] (localhost [127.0.0.1]) by tdd2172.tddeng00.fnts.com (8.11.7p3+Sun/8.11.7) with ESMTP id l28MX1v13668 for ; Thu, 8 Mar 2007 16:33:01 -0600 (CST) Message-ID: <45F08F1D.5080708@us.fujitsu.com> Date: Thu, 08 Mar 2007 16:33:01 -0600 From: Dave Baukus User-Agent: Mozilla Thunderbird 1.0 (X11/20041208) X-Accept-Language: en-us, en MIME-Version: 1.0 To: net@freebsd.org References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> <45EEB086.3050409@FreeBSD.org> <45F03269.7050705@FreeBSD.org> In-Reply-To: <45F03269.7050705@FreeBSD.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Subject: netisr_direct 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: Thu, 08 Mar 2007 22:43:36 -0000 What's the word on netisr_direct ? Do people typically enable this feature ? net/netisr.c: static int netisr_direct = 0; SYSCTL_INT(_net_isr, OID_AUTO, direct, CTLFLAG_RW, &netisr_direct, 0, "enable direct dispatch"); TUNABLE_INT("net.isr.direct", &netisr_direct); /* * Do direct dispatch only for MPSAFE netisrs (and * only when enabled). Note that when a netisr is * marked MPSAFE we permit multiple concurrent instances * to run. We guarantee only the order in which * packets are processed for each "dispatch point" in * the system (i.e. call to netisr_dispatch or * netisr_queue). This insures ordering of packets * from an interface but does not guarantee ordering * between multiple places in the system (e.g. IP * dispatched from interfaces vs. IP queued from IPSec). */ if (netisr_direct && (ni->ni_flags & NETISR_MPSAFE)) { isrstat.isrs_directed++; /* * NB: We used to drain the queue before handling * the packet but now do not. Doing so here will * not preserve ordering so instead we fallback to * guaranteeing order only from dispatch points * in the system (see above). */ ni->ni_handler(m); -- Dave Baukus david.baukus@us.fujitsu.com 972-479-2491 Fujitsu Network Communications Richardson, Texas USA From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 23:09:58 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0BCFB16A400; Thu, 8 Mar 2007 23:09:58 +0000 (UTC) (envelope-from rik@inse.ru) Received: from mail.inse.ru (inse.ru [144.206.128.1]) by mx1.freebsd.org (Postfix) with ESMTP id B4E5013C471; Thu, 8 Mar 2007 23:09:57 +0000 (UTC) (envelope-from rik@inse.ru) Received: from [127.0.0.1] (www.inse.ru [144.206.128.1]) by mail.inse.ru (Postfix) with ESMTP id EA4B833C4C; Fri, 9 Mar 2007 02:09:55 +0300 (MSK) Message-ID: <45F09891.2020505@inse.ru> Date: Fri, 09 Mar 2007 02:13:21 +0300 From: Roman Kurakin User-Agent: Thunderbird 1.5.0.9 (X11/20070212) MIME-Version: 1.0 To: Andrew Thompson References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EDA348.3030309@inse.ru> <20070307210254.GD54828@heff.fud.org.nz> In-Reply-To: <20070307210254.GD54828@heff.fud.org.nz> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: rik@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, andre@FreeBSD.org, bms@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Thu, 08 Mar 2007 23:09:58 -0000 Andrew Thompson wrote: > On Tue, Mar 06, 2007 at 08:22:16PM +0300, Roman Kurakin wrote: > >> Ok, since no one want to provide an explanation I'll to do it myself. >> > ... > >> I suggest to fix this problem in the other way, by checking if the >> physical interface >> is the dst interface by MAC. Eq if we got packet from Ci, it will be >> market as received >> from Ci, not from Cj. Yes it will add double checking for this interface >> it is not the >> dst with some probability, but will optimize the case the dst is the >> current one cause >> we will not check the list. This will keep the old behaviour eq case 1 >> and will do the >> same trick for cases like VLANs. Here my variant of the patch: >> > > I think this is probably the best way to do it. I have only been loosely > following this thread due to other stuff going on. > > >> + /* Give a chance for ifp at first priority. This will help in case >> we >> + * the packet comes through the interface with VLAN's and the same >> + * MACs on several interfaces in a bridge. Also will save some >> circles >> + * in case dst interface is the physical input interface (eq ifp). >> + */ >> + if (ifp->if_type == IFT_GIF >> > ^^^^^^^^^^^^^^^^^^^^^^^ > is this check right? > > It was taken from original code. In the rest part of course there is no bif2, but ifp. I'll plane to make a macro as suggested by Eygene. This code shouldn't be in a separate function for sure. So code will look like #define somemacro .... somemacro(ifp) LIST_FOREACH() somemacro(bif2->bif_ifp) rik From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 23:34:47 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 191BB16A401 for ; Thu, 8 Mar 2007 23:34:47 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from smtp-gw1.starman.ee (smtp-out5.starman.ee [85.253.0.7]) by mx1.freebsd.org (Postfix) with ESMTP id A649F13C461 for ; Thu, 8 Mar 2007 23:34:46 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from mx2.starman.ee (mx2.starman.ee [62.65.192.9]) by smtp-gw1.starman.ee (Postfix) with ESMTP id DF34CA217ED for ; Fri, 9 Mar 2007 01:11:24 +0200 (EET) Received: from haigemalt_ei_osanud_smtp_serverit_confida_voi.starman.ee (depression.softematic.com [62.65.205.81]) by mx2.starman.ee (Postfix) with ESMTP id 65AA532C486; Fri, 9 Mar 2007 01:11:24 +0200 (EET) From: Sven Petai To: freebsd-net@freebsd.org Date: Fri, 9 Mar 2007 01:11:40 +0200 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703090111.40417.hadara@bsd.ee> X-Virus-Scanned: by Amavisd-New at mx2.starman.ee Subject: em problems on supermicro 5015M-MT+ 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: Thu, 08 Mar 2007 23:34:47 -0000 Hi We have 3 supermicro 5015M-MT+ machines that are identical hw wise and are all running 6.2R. One of them was installed in 32 bit mode and others are running 64 bit systems. They are all connected to the same Cisco switch (2960G). 32 bit system can communicate with all the other systems besides the 64 bit boxes just fine. When we transfer files between the two 64 bit systems everything seems to be just fine and we get reasonable speeds. When one of the 64 bit systems tries to communicate with the 32 bit box or any other system whatsoever it gets: * ~40KB/s when interface is in gigabit mode * 320KB/s when interface is in 100baseTX full-duplex * 500KB/s when interface is in 100baseTX half-duplex Tcpdump is full of lost packets, out of order packets, retransmits, duplicate acks (probably all caused by fast-retransmit) and all other kinds of nastiness. We also see the infamous "em0 watchdog timeout -- resetting" messages from time to time, but not always when doing the tests so resets alone can't be the reason. We have tried various network settings from polling to debug.mpsafenet=0 and nothing seems to help much. To exclude possibilty of broken switch port/ bad cable we also tried the same thing with em1 interfaces (with other cables of course) and still got identical symptoms. So what can possibly cause the fact that systems can communicate fine with eachother and fail so miserably when communicating with anything else ? If nobody can come up with any good ideas we will probably try installing 32 bit systems on the problamatic machines since it seems to be the only relevant difference between the working and non-working ones. The 64 bit boxes are currently in preproduction testing and we can provide access to for developers who wish to debug it. Full dmesg & pciinfo is available @ http://bsd.ee/~hadara/debug/supermicro/ The most relevant parts are: pciconf: em0@pci13:0:0: class=0x020000 card=0x108c15d9 chip=0x108c8086 rev=0x03 hdr=0x00 vendor = 'Intel Corporation' device = 'PRO/1000 PM' class = network subclass = ethernet em1@pci14:0:0: class=0x020000 card=0x109a15d9 chip=0x109a8086 rev=0x00 hdr=0x00 vendor = 'Intel Corporation' class = network subclass = ethernet dmesg: em0: port 0x4000-0x401f mem 0xe0200000-0xe021ffff irq 16 at device 0.0 on pci13 em0: Ethernet address: 00:30:48:8c:52:78 pcib5: irq 16 at device 28.5 on pci0 pci14: on pcib5 em1: port 0x5000-0x501f mem 0xe0300000-0xe031ffff irq 17 at device 0.0 on pci14 em1: Ethernet address: 00:30:48:8c:52:79 From owner-freebsd-net@FreeBSD.ORG Thu Mar 8 23:51:02 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A95C016A402 for ; Thu, 8 Mar 2007 23:51:02 +0000 (UTC) (envelope-from jfvogel@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.232]) by mx1.freebsd.org (Postfix) with ESMTP id 76F2013C428 for ; Thu, 8 Mar 2007 23:51:00 +0000 (UTC) (envelope-from jfvogel@gmail.com) Received: by wr-out-0506.google.com with SMTP id 71so1075921wri for ; Thu, 08 Mar 2007 15:51:00 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=js8SlhhXqfYQvPaDFGRYilx2AT4if8quzivD/LYYzInGkPDth4NqsxVQpDZXRkC8e0Qd9qhhxsjIoZb215jRCDEf/JGwuY2yCLxdLUg7uqzykw+oiGAtiWhXCqt8BAgnF/gkktqyW5uxXOOoh+SDqx3/Nc1JG0V0WqtB42ETAGA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=DVQjyozOygA2dxAw6joYfZOdziKU3bFWQGayxK0T7hCGaP1nNHvblIKISUA6jFcb3FXp0WTUsjkcgGk05/CIQse1NaQSh+IWuqVCUb9JVLuUXkXUvw55xDxz+tW+wToltuNKxWSxy4eb4nuSCCxDQ4RXV3B5xixESZqAbtpGgrw= Received: by 10.115.61.1 with SMTP id o1mr321987wak.1173397856533; Thu, 08 Mar 2007 15:50:56 -0800 (PST) Received: by 10.114.103.15 with HTTP; Thu, 8 Mar 2007 15:50:56 -0800 (PST) Message-ID: <2a41acea0703081550s44605ba9o301e04e01e25aef6@mail.gmail.com> Date: Thu, 8 Mar 2007 15:50:56 -0800 From: "Jack Vogel" To: "Sven Petai" In-Reply-To: <200703090111.40417.hadara@bsd.ee> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_79749_24905983.1173397856415" References: <200703090111.40417.hadara@bsd.ee> X-Mailman-Approved-At: Fri, 09 Mar 2007 02:57:14 +0000 Cc: freebsd-net@freebsd.org Subject: Re: em problems on supermicro 5015M-MT+ 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: Thu, 08 Mar 2007 23:51:02 -0000 ------=_Part_79749_24905983.1173397856415 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 3/8/07, Sven Petai wrote: > Hi > > We have 3 supermicro 5015M-MT+ machines that are identical hw > wise and are all running 6.2R. One of them was installed in 32 > bit mode and others are running 64 bit systems. > They are all connected to the same Cisco switch (2960G). > > 32 bit system can communicate with all the other systems besides > the 64 bit boxes just fine. > When we transfer files between the two 64 bit systems everything > seems to be just fine and we get reasonable speeds. > > When one of the 64 bit systems tries to communicate with the 32 bit box or any > other system whatsoever it gets: > * ~40KB/s when interface is in gigabit mode > * 320KB/s when interface is in 100baseTX full-duplex > * 500KB/s when interface is in 100baseTX half-duplex > > Tcpdump is full of lost packets, out of order packets, retransmits, duplicate > acks (probably all caused by fast-retransmit) and all other kinds of > nastiness. > > We also see the infamous "em0 watchdog timeout -- resetting" messages from > time to time, but not always when doing the tests so resets alone can't be > the reason. > > We have tried various network settings from polling to debug.mpsafenet=0 > and nothing seems to help much. To exclude possibilty of broken switch port/ > bad cable we also tried the same thing with em1 interfaces (with other cables > of course) and still got identical symptoms. > > So what can possibly cause the fact that systems can communicate fine with > eachother and fail so miserably when communicating with anything else ? > > If nobody can come up with any good ideas we will probably try installing 32 > bit systems on the problamatic machines since it seems to be the only > relevant difference between the working and non-working ones. > > The 64 bit boxes are currently in preproduction testing and we can provide > access to for developers who wish to debug it. > > Full dmesg & pciinfo is available @ > http://bsd.ee/~hadara/debug/supermicro/ > > The most relevant parts are: > > pciconf: > em0@pci13:0:0: class=0x020000 card=0x108c15d9 chip=0x108c8086 rev=0x03 > hdr=0x00 > vendor = 'Intel Corporation' > device = 'PRO/1000 PM' > class = network > subclass = ethernet > em1@pci14:0:0: class=0x020000 card=0x109a15d9 chip=0x109a8086 rev=0x00 > hdr=0x00 > vendor = 'Intel Corporation' > class = network > subclass = ethernet > > dmesg: > em0: port 0x4000-0x401f > mem 0xe0200000-0xe021ffff irq 16 at device 0.0 on pci13 > em0: Ethernet address: 00:30:48:8c:52:78 > pcib5: irq 16 at device 28.5 on pci0 > pci14: on pcib5 > em1: port 0x5000-0x501f > mem 0xe0300000-0xe031ffff irq 17 at device 0.0 on pci14 > em1: Ethernet address: 00:30:48:8c:52:79 I am not sure why the 32/64 bit architecture is making a difference, however, you have the 573 NIC, so before doing anything else run this DOS app, it will patch your eeprom if needed, the problem is a misprogramed MANC register that tends to eat packets when it shouldnt. Please let me know if that helps. Oh, you arent using TSO by some chance are you? Jack ------=_Part_79749_24905983.1173397856415 Content-Type: application/octet-stream; name="dcgdis.ThisIsZip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dcgdis.ThisIsZip" X-Attachment-Id: f_ez1us5o8 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 ------=_Part_79749_24905983.1173397856415-- From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 03:10:47 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C1FFF16A400 for ; Fri, 9 Mar 2007 03:10:47 +0000 (UTC) (envelope-from smw2010@gmail.com) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.186]) by mx1.freebsd.org (Postfix) with ESMTP id 5C79913C441 for ; Fri, 9 Mar 2007 03:10:47 +0000 (UTC) (envelope-from smw2010@gmail.com) Received: by nf-out-0910.google.com with SMTP id k27so829038nfc for ; Thu, 08 Mar 2007 19:10:46 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; b=Q9FeLtOjwXimnXbJjfodnEDLFODhW6Ydci169MWp6vEw03jRaaeYVZrMuKsEXFM2ihrL8X/4gsOCyCnGZs6uzPjFU/6SmIqNT3emyY5AhQsN9thnai4Tw30hAzukVrF3i8mBxNvOjy8U1vZ18d8U3oPptDBtuRENYE+/4k6mM3k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=YBH+Gf8yzSPawlLgTPpKKaBYL4YYl+hX7SIGy1o7SXSFsS9SpNyR5dqUdZ9zQF6MsJM23QZN+PxMNu+IavF6wxrUyJGEVHfltCQALUV1S6sELf4Y8YWIYO5/WX1HvLE9Wb6BAVuONiBHnA7Gwn/9aiMS8YFLwMgr1D2mVJlGuC0= Received: by 10.114.169.2 with SMTP id r2mr388396wae.1173409845406; Thu, 08 Mar 2007 19:10:45 -0800 (PST) Received: by 10.114.13.3 with HTTP; Thu, 8 Mar 2007 19:10:45 -0800 (PST) Message-ID: Date: Fri, 9 Mar 2007 14:10:45 +1100 From: "Sam Wun" To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: wireless serer card that can handle multi-users 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: Fri, 09 Mar 2007 03:10:47 -0000 Hi, About half year ago, I tested a mini wireless server card with FreeBSD 6. The connection runs very fast if only myself using it, but when there are more than 1 user connected to it, the second user will suffer extremely slow wireless network connection. My colleague also told me he also experienced that problem for his clients. So he purchased a cheap D-Link Wireless access point for his client rather than bundle the wireless access point (card) in the freebsd router box. Can anyone tell me which wifi server card don't have that problem when configured with freebsd? Thanks P From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 07:22:32 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4B82716A407; Fri, 9 Mar 2007 07:22:32 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from pobox.codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id EBC5113C494; Fri, 9 Mar 2007 07:22:31 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from codelabs.ru (pobox.codelabs.ru [144.206.177.45]) by pobox.codelabs.ru with esmtpsa (TLSv1:AES256-SHA:256) id 1HPZQs-0008Ww-5m; Fri, 09 Mar 2007 10:22:30 +0300 Date: Fri, 9 Mar 2007 10:22:24 +0300 From: Eygene Ryabinkin To: Andrew Thompson Message-ID: <20070309072224.GR58523@codelabs.ru> References: <45E9F1E8.2000802@inse.ru> <20070304062203.GL80319@codelabs.ru> <45E9F1E8.2000802@inse.ru> <20070304160613.GN80319@codelabs.ru> <45EDA348.3030309@inse.ru> <20070307210254.GD54828@heff.fud.org.nz> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <20070307210254.GD54828@heff.fud.org.nz> Sender: rea-fbsd@codelabs.ru X-Spam-Status: No, score=-2.1 required=4.0 tests=ALL_TRUSTED,AWL,BAYES_50 Cc: rik@FreeBSD.org, Roman Kurakin , andre@FreeBSD.org, freebsd-net@freebsd.org, glebius@FreeBSD.org, bms@FreeBSD.org Subject: Re: kern/109815: wrong interface identifier at pfil_hooks for vlans + if_bridge 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: Fri, 09 Mar 2007 07:22:32 -0000 > > > > + /* Give a chance for ifp at first priority. This will help in case > > we > > + * the packet comes through the interface with VLAN's and the same > > + * MACs on several interfaces in a bridge. Also will save some > > circles > > + * in case dst interface is the physical input interface (eq ifp). > > + */ > > + if (ifp->if_type == IFT_GIF > ^^^^^^^^^^^^^^^^^^^^^^^ > is this check right? No, it should read if (ifp->if_type == IFT_GIF) continue; if (memcmp(IF_LLADDR(.....))) { ... } -- Eygene From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 09:16:26 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CA1D316A401 for ; Fri, 9 Mar 2007 09:16:26 +0000 (UTC) (envelope-from antonio.tommasi@unile.it) Received: from cabis.unile.it (cabis.unile.it [212.189.128.35]) by mx1.freebsd.org (Postfix) with ESMTP id 8438E13C441 for ; Fri, 9 Mar 2007 09:16:26 +0000 (UTC) (envelope-from antonio.tommasi@unile.it) Received: from localhost (cabis [127.0.0.1]) by cabis.unile.it (Postfix) with ESMTP id 4ED3122AF07 for ; Fri, 9 Mar 2007 10:16:25 +0100 (CET) X-Virus-Scanned: virus/spam checker at unile.it Received: from cabis.unile.it ([127.0.0.1]) by localhost (cabis.unile.it [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id B2qXfQku71ZX for ; Fri, 9 Mar 2007 10:16:25 +0100 (CET) Received: from [212.189.128.38] (titto.unile.it [212.189.128.38]) by cabis.unile.it (Postfix) with ESMTP id B45AD22AF0C for ; Fri, 9 Mar 2007 10:16:18 +0100 (CET) Mime-Version: 1.0 Message-Id: Date: Fri, 9 Mar 2007 10:16:20 +0100 To: freebsd-net@freebsd.org From: Antonio Tommasi Content-Type: text/plain; charset="us-ascii" ; format="flowed" Subject: UltraVNC on freebsd 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: Fri, 09 Mar 2007 09:16:26 -0000 Hi to all, i've this scenario: one machine in a private network one machine with a public machine i need to control with vnc the machine with private ip by the machine with public ip. This is possibile installing ultravnc on the private machine (with freebsd) so i can start the communication with public machine and control the private machine? Which VNC? thanks in advance From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 10:53:23 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 31B5416A400 for ; Fri, 9 Mar 2007 10:53:23 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from pinky.frank-behrens.de (pinky.frank-behrens.de [82.139.199.24]) by mx1.freebsd.org (Postfix) with ESMTP id 913A013C461 for ; Fri, 9 Mar 2007 10:53:22 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from [192.168.20.32] (sun.behrens [192.168.20.32]) by pinky.frank-behrens.de (8.13.8/8.13.8) with ESMTP id l29AawwJ005466 for ; Fri, 9 Mar 2007 11:36:58 +0100 (CET) (envelope-from frank@pinky.sax.de) Message-Id: <200703091036.l29AawwJ005466@pinky.frank-behrens.de> From: "Frank Behrens" To: freebsd-net@freebsd.org Date: Fri, 09 Mar 2007 11:36:57 +0100 MIME-Version: 1.0 Priority: normal X-mailer: Pegasus Mail for Windows (4.31, DE v4.31 R1) Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body Subject: tap(4) should go UP if opened 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: Fri, 09 Mar 2007 10:53:23 -0000 I want to diskuss the tap(4) behaviour before I create a PR: The tap(4) interface does not go automatically in UP state (IFF_UP) when opened by a process. Therefore an additional command "ifconfig tapx up" is necessary, which can execute root only. On the other site the interface goes down automatically when closed. I propose that tap(4) is set to UP when opened by an user process. This can be achieved with the following patch (on FreeBSD 6.2-STABLE-200703081613): --- sys/net/if_tap.c.orig Thu Mar 8 19:10:59 2007 +++ sys/net/if_tap.c Fri Mar 9 10:05:57 2007 @@ -501,6 +501,7 @@ s = splimp(); ifp->if_drv_flags |= IFF_DRV_RUNNING; ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + ifp->if_flags |= IFF_UP; splx(s); TAPDEBUG("%s is open. minor = %#x\n", ifp->if_xname, minor(dev)); How does tun(4) handle this? tun(4) is also set to down, when closed. It is not set to up, when ist is opened, but when an address is assigned by the user process. This is fine, because it needs always an ip address. tap(4) as layer 2 tunnel device does not need an ip address, so setting it up on open is IMHO the best solution. Sound this reasonable or how should I handle the tap(4) open by an user process, when this process does not run as root? Regards, Frank -- Frank Behrens, Osterwieck, Germany PGP-key 0x5B7C47ED on public servers available. From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 12:08:27 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CCC1816A402 for ; Fri, 9 Mar 2007 12:08:27 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from smtp-out.neti.ee (smtp-out.neti.ee [194.126.126.45]) by mx1.freebsd.org (Postfix) with ESMTP id 7F01C13C46B for ; Fri, 9 Mar 2007 12:08:27 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from smtp-out.neti.ee (unknown [88.196.174.135]) by HOT-Bounce1.estpak.ee (Postfix) with ESMTP id A5D4255E43F for ; Fri, 9 Mar 2007 13:41:04 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by MXR-4.estpak.ee (Postfix) with ESMTP id AE0661F4E88; Fri, 9 Mar 2007 13:41:04 +0200 (EET) X-Virus-Scanned: by amavisd-new-2.4.3 (20060930) (Debian) at neti.ee Received: from smtp-out.neti.ee ([127.0.0.1]) by localhost (MXR-2.estpak.ee [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TlPii+YeXAtR; Fri, 9 Mar 2007 13:41:03 +0200 (EET) Received: from Relayhost3.neti.ee (unknown [88.196.174.169]) by MXR-4.estpak.ee (Postfix) with ESMTP id D8EF31F4E87; Fri, 9 Mar 2007 13:41:03 +0200 (EET) Received: from nat-155.nat (test.estpak.ee [194.126.115.47]) by Relayhost3.neti.ee (Postfix) with ESMTP id D9C9D8C7A; Fri, 9 Mar 2007 13:40:58 +0200 (EET) From: Sven Petai To: freebsd-net@freebsd.org Date: Fri, 9 Mar 2007 13:42:41 +0200 User-Agent: KMail/1.9.3 References: <200703090111.40417.hadara@bsd.ee> <2a41acea0703081550s44605ba9o301e04e01e25aef6@mail.gmail.com> In-Reply-To: <2a41acea0703081550s44605ba9o301e04e01e25aef6@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703091342.42495.hadara@bsd.ee> Cc: Jack Vogel Subject: Re: em problems on supermicro 5015M-MT+ 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: Fri, 09 Mar 2007 12:08:27 -0000 On Friday 09 March 2007 01:50, Jack Vogel wrote: > On 3/8/07, Sven Petai wrote: > > I am not sure why the 32/64 bit architecture is making a difference, > however, you have the 573 NIC, so before doing anything else run this DOS > app, it will patch your eeprom if needed, the problem is a misprogramed > MANC register that tends to eat packets when it shouldnt. the utility said the fix was not needed and symptoms didn't change either. > > Please let me know if that helps. > Oh, you arent using TSO by some chance are you? no From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 12:30:52 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0357216A408 for ; Fri, 9 Mar 2007 12:30:52 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out5.smtp.messagingengine.com (out5.smtp.messagingengine.com [66.111.4.29]) by mx1.freebsd.org (Postfix) with ESMTP id C7A3913C4B4 for ; Fri, 9 Mar 2007 12:30:51 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from out1.internal (unknown [10.202.2.149]) by out1.messagingengine.com (Postfix) with ESMTP id 24D961F6D5C; Fri, 9 Mar 2007 07:30:49 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by out1.internal (MEProxy); Fri, 09 Mar 2007 07:30:51 -0500 X-Sasl-enc: CPJal9ZGJ9rBardeqqPMMBmvyHotwHKqQqx/B8Esxqe/ 1173443450 Received: from [192.168.123.18] (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTP id BAFCA20ADA; Fri, 9 Mar 2007 07:30:49 -0500 (EST) Message-ID: <45F15378.3020207@FreeBSD.org> Date: Fri, 09 Mar 2007 12:30:48 +0000 From: "Bruce M. Simpson" User-Agent: Thunderbird 1.5.0.9 (X11/20070125) MIME-Version: 1.0 To: Frank Behrens References: <200703091036.l29AawwJ005466@pinky.frank-behrens.de> In-Reply-To: <200703091036.l29AawwJ005466@pinky.frank-behrens.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: tap(4) should go UP if opened 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: Fri, 09 Mar 2007 12:30:52 -0000 Frank Behrens wrote: > How does tun(4) handle this? tun(4) is also set to down, when closed. It is not set to up, when > ist is opened, but when an address is assigned by the user process. This is fine, because it > needs always an ip address. tap(4) as layer 2 tunnel device does not need an ip address, so > setting it up on open is IMHO the best solution. > > This isn't consistent with the other software cloneable interfaces which emulate certain layer 2 semantics, e.g. bridge, trunk, vlan; see below. > Sound this reasonable or how should I handle the tap(4) open by an user process, when this > process does not run as root? > I recently committed Landon Fuller's code which makes tap and tun cloneable interfaces which may then be created via 'ifconfig tap0 create'. Automatically setting the interface to IFF_UP is not consistent with the semantics for other network interfaces; it requires specific privileges (usually super-user or PRIV_NET_SETIFFLAGS in -CURRENT) to do. However, we also support the creation of tap/tun instances by non-super-users, so there is motivation for the change. Configuring a tap interface to up by a non-superuser should only be permitted if the interface itself was created by a non-superuser, and if net.link.tap.user_open is set to 1. A more involved patch is needed to do this right for all cases -- we should not do this by default. Regards, BMS From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 13:26:52 2007 Return-Path: X-Original-To: freebsd-net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 123A716A404 for ; Fri, 9 Mar 2007 13:26:52 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from pinky.frank-behrens.de (pinky.frank-behrens.de [82.139.199.24]) by mx1.freebsd.org (Postfix) with ESMTP id 5859613C48D for ; Fri, 9 Mar 2007 13:26:50 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from [192.168.20.32] (sun.behrens [192.168.20.32]) by pinky.frank-behrens.de (8.13.8/8.13.8) with ESMTP id l29DQkYk008478; Fri, 9 Mar 2007 14:26:46 +0100 (CET) (envelope-from frank@pinky.sax.de) Message-Id: <200703091326.l29DQkYk008478@pinky.frank-behrens.de> From: "Frank Behrens" To: "Bruce M. Simpson" Date: Fri, 09 Mar 2007 14:26:45 +0100 MIME-Version: 1.0 Priority: normal In-reply-to: <45F15378.3020207@FreeBSD.org> References: <200703091036.l29AawwJ005466@pinky.frank-behrens.de> X-mailer: Pegasus Mail for Windows (4.31, DE v4.31 R1) Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body Cc: freebsd-net@FreeBSD.org Subject: Re: tap(4) should go UP if opened 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: Fri, 09 Mar 2007 13:26:52 -0000 Bruce, thanks for your answer! Bruce M. Simpson wrote on 9 Mar 2007 12:30: > Frank Behrens wrote: > > How does tun(4) handle this? tun(4) is also set to down, when closed. It is not set to up, when > > ist is opened, but when an address is assigned by the user process. This is fine, because it > > needs always an ip address. tap(4) as layer 2 tunnel device does not need an ip address, so > > setting it up on open is IMHO the best solution. > > > This isn't consistent with the other software cloneable interfaces which > emulate certain layer 2 semantics, e.g. bridge, trunk, vlan; see below. May be, but we have for tap(4) the possibility to attach a non root user process. > I recently committed Landon Fuller's code which makes tap and tun > cloneable interfaces which may then be created via 'ifconfig tap0 create'. I appreciate that. :-) It was the reason to build a new 6.2 kernel and to try to run the attached process not as root. > Automatically setting the interface to IFF_UP is not consistent with the > semantics for other network interfaces; it requires specific privileges > (usually super-user or PRIV_NET_SETIFFLAGS in -CURRENT) to do. My idea is to set it to IFF_UP when the process _opens_ the interface. It can happen only if 1. the process has root provileges OR 2. net.link.tap.user_open=1 AND special rights are set on /dev/tapx > A more involved patch is needed to do this right for all cases -- we > should not do this by default. But when it is useful to open a tap device by a non root process, when the tap is not IFF_UP? May be my patch had not enough context to see immediately, where it fits into the game. To make it easier for the reviewers I show the complete function: /* * tapopen * * to open tunnel. must be superuser */ static int tapopen(struct cdev *dev, int flag, int mode, struct thread *td) { struct tap_softc *tp = NULL; struct ifnet *ifp = NULL; int error, s; if (tapuopen == 0) { error = suser(td); if (error != 0) return (error); } if ((dev2unit(dev) & CLONE_UNITMASK) > TAPMAXUNIT) return (ENXIO); tp = dev->si_drv1; mtx_lock(&tp->tap_mtx); if (tp->tap_flags & TAP_OPEN) { mtx_unlock(&tp->tap_mtx); return (EBUSY); } bcopy(IFP2ENADDR(tp->tap_ifp), tp->ether_addr, sizeof(tp->ether_addr)); tp->tap_pid = td->td_proc->p_pid; tp->tap_flags |= TAP_OPEN; ifp = tp->tap_ifp; mtx_unlock(&tp->tap_mtx); s = splimp(); ifp->if_drv_flags |= IFF_DRV_RUNNING; ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; ifp->if_flags |= IFF_UP; /* ------- new line ------ */ splx(s); TAPDEBUG("%s is open. minor = %#x\n", ifp->if_xname, minor(dev)); return (0); } /* tapopen */ Regards, Frank -- Frank Behrens, Osterwieck, Germany PGP-key 0x5B7C47ED on public servers available. From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 13:44:33 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0466D16A405 for ; Fri, 9 Mar 2007 13:44:33 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from pinky.frank-behrens.de (pinky.frank-behrens.de [82.139.199.24]) by mx1.freebsd.org (Postfix) with ESMTP id 6583C13C442 for ; Fri, 9 Mar 2007 13:44:32 +0000 (UTC) (envelope-from frank@pinky.sax.de) Received: from [192.168.20.32] (sun.behrens [192.168.20.32]) by pinky.frank-behrens.de (8.13.8/8.13.8) with ESMTP id l29DiRRE008786 for ; Fri, 9 Mar 2007 14:44:27 +0100 (CET) (envelope-from frank@pinky.sax.de) Message-Id: <200703091344.l29DiRRE008786@pinky.frank-behrens.de> From: "Frank Behrens" To: freebsd-net@freebsd.org Date: Fri, 09 Mar 2007 14:44:27 +0100 MIME-Version: 1.0 Priority: normal X-mailer: Pegasus Mail for Windows (4.31, DE v4.31 R1) Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body Subject: Assign IP address to which interface when using if_bridge(4)? 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: Fri, 09 Mar 2007 13:44:33 -0000 I see some problems with if_bridge(4) and want to investigate this further. But before I make further tests I want to be sure to have the right setup. I could not find any hints in the documentation including FreeBSD handbook. I have an ethernet device xl0 and want to create a if_bridge(4) to tap(4): ifconfig bridge0 create ifconfig bridge0 addm xl0 addm tap0 up Now I have 3 interfaces, to which of them should I assign the ip address? When searching for information I found both possibilities: 1. Assign the IP address to child interface (e.g. xl0) and use this also for routing setup. 2. Assign the address to bridge interface (bridge0) and use this as reference interface. I assume 1. is the right solution, because the bridge0 does not even create link-local addresses. Am I right? Regards, Frank -- Frank Behrens, Osterwieck, Germany PGP-key 0x5B7C47ED on public servers available. From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 13:57:21 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 293AD16A404 for ; Fri, 9 Mar 2007 13:57:21 +0000 (UTC) (envelope-from sonicsai@gmail.com) Received: from ik-out-1112.google.com (ik-out-1112.google.com [66.249.90.176]) by mx1.freebsd.org (Postfix) with ESMTP id A975013C478 for ; Fri, 9 Mar 2007 13:57:20 +0000 (UTC) (envelope-from sonicsai@gmail.com) Received: by ik-out-1112.google.com with SMTP id c21so871970ika for ; Fri, 09 Mar 2007 05:57:19 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=iJW4fGNiz+9w9ieDf0F2uvsRGPxtjHunXInf/zWHzRvVlME6S26hvsdtaWXuqYMCbOfnATi1HjvG5pQKrlCHlBV0F8t/8qQUoW0VYNcJYBy+sSJlXzjFsDkLohCbawZmE5AuAEmOxu9HQr3JDnreFzhFq/1JfxeTTrm0XX1/udM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=fFsfzNmfwgthOt8V+T2ptsQH02rZkpumvU4Jx763C33G4sOTqsactsQ6zGcRZlSf0I4kEpGFMuyJ6ZD5i5aICV6si4uFNRDh2DJT3JPC7vAXFukGlYemvwE/7uM0/2GEKYE9O2jwNzEhUAaw9gJca0FoCkd3po1rET7i/9ljyRg= Received: by 10.114.78.1 with SMTP id a1mr557749wab.1173446943703; Fri, 09 Mar 2007 05:29:03 -0800 (PST) Received: by 10.114.37.13 with HTTP; Fri, 9 Mar 2007 05:29:03 -0800 (PST) Message-ID: <41d04d600703090529s6711da60vf2bd768e439b3d0@mail.gmail.com> Date: Fri, 9 Mar 2007 18:29:03 +0500 From: sai To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: malformed / oversized frame leads to loss of connectivity 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: Fri, 09 Mar 2007 13:57:21 -0000 (previously posted on freebsd-questions, but with no resolution) I get this error quite frequently on my pf firewall running 6.2 and it leads to loss of internet access. kernel: vr0: discard oversize frame (ether type 710a flags 3 len 1532 > max 1514) vr0 is connected to my ISPs cable modem, ip address is provided by DHCP. Whenever I get this oversized (or maybe malformed) packet I need to reboot my machine to get back online, though sometimes just resetting (down, then up) the ethernet port works also. I get the same problem with rl network cards (previously reported by Jeremy Tay: "misc/63190: Realtek driver halts on oversized frame" , FreeBSD 5.1-RELEASE , http://lists.freebsd.org/pipermail/freebsd-bugs/2004-February/005534.html ) Reports with other ethernet cards: xl http://angel.kafazov.com/blog/?p=41 FreeBSD 6.1 sk : http://lists.freebsd.org/pipermail/freebsd-bugs/2004-September/008784.html 6.0 kern/71229 sis: http://lists.soekris.com/pipermail/soekris-tech/2006-January/009829.html 6.0 bge : http://www.mail-archive.com/freebsd-net@freebsd.org/msg21324.html sai From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 14:23:54 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8D40E16A401 for ; Fri, 9 Mar 2007 14:23:54 +0000 (UTC) (envelope-from lists@swaggi.com) Received: from rusty.swaggy.net (rusty.swaggy.net [66.103.13.18]) by mx1.freebsd.org (Postfix) with ESMTP id 5BD4713C4A5 for ; Fri, 9 Mar 2007 14:23:54 +0000 (UTC) (envelope-from lists@swaggi.com) Received: from [127.0.0.1] (helo=swaggi.com) by rusty.swaggy.net with esmtp (Exim 4.66 (FreeBSD)) (envelope-from ) id 1HPfk5-000K3k-3k; Fri, 09 Mar 2007 09:06:50 -0500 From: "Yuri Lukin" To: "Sam Wun" Date: Fri, 9 Mar 2007 09:06:44 -0500 Message-Id: <20070309140331.M56659@swaggi.com> In-Reply-To: References: X-Mailer: swaggi.com MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Cc: freebsd-net@freebsd.org Subject: Re: wireless serer card that can handle multi-users 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: Fri, 09 Mar 2007 14:23:54 -0000 On Fri, 9 Mar 2007 14:10:45 +1100, Sam Wun wrote > Hi, > > About half year ago, I tested a mini wireless server card with > FreeBSD 6. The connection runs very fast if only myself using it, > but when there are more than 1 user connected to it, the second > user will suffer extremely slow wireless network connection. My > colleague also told me he also experienced that problem for his > clients. So he purchased a cheap D-Link Wireless access point for > his client rather than bundle the wireless access point > (card) in the freebsd router box. > > Can anyone tell me which wifi server card don't have that problem > when configured with freebsd? Assuming that you're talking about MiniPCI cards, you can use any based on the Atheros chipset. I believe most if not all currently shipping Atheros cards are supported in FreeBSD 6.2. I have personally been using Wistron CM9 for nearly a year now. As far as the problem you described, you could have been running mixed b/g mode causing protection bit to be set which effectively reduces the throughput of your wireless LAN. Yuri From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 15:56:11 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 53AC716A402; Fri, 9 Mar 2007 15:56:11 +0000 (UTC) (envelope-from qingli@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 425C613C4C2; Fri, 9 Mar 2007 15:56:11 +0000 (UTC) (envelope-from qingli@FreeBSD.org) Received: from freefall.freebsd.org (qingli@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l29FuBNX034229; Fri, 9 Mar 2007 15:56:11 GMT (envelope-from qingli@freefall.freebsd.org) Received: (from qingli@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l29FuBiv034228; Fri, 9 Mar 2007 15:56:11 GMT (envelope-from qingli) Date: Fri, 9 Mar 2007 15:56:11 GMT From: Qing Li Message-Id: <200703091556.l29FuBiv034228@freefall.freebsd.org> To: freebsd-net@freebsd.org Subject: IPv6 Book - Volume II 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: Fri, 09 Mar 2007 15:56:11 -0000 Hi, Last October we published a book on the KAME implementation and on IPv6 in general. The book is titled "IPv6 Core Protocols Implementation". We recently published Volume-II of this two-book series. Volume-II is titled "IPv6 Advanced Protocols Implementation". It is published by Morgan Kaufmann, ISBN 0123704790. The link is http://www.mkp.com. This book engages the readers in advanced topics such as IPv6 unicast routing, IPv6 multicasting, DNS, DHCPv6, Mobile IPv6, and security. Just like Volume-I, this book contains in-depth coverage on the specifications as well as line-by-line code walkthrough, which is similar in style to Steven's TCP/IP Illustrated Volume II. We would like to thank the FreeBSD community for helping making this book possible. In particular, we'd like to thank the developers Suzuki Shinsuke, David Borman, Daniel Hartmeier, Jeffrey Hsu, and George V. Neville-Neil for being our reviewers. We hope this book could become another useful contribution to the FreeBSD community. Thank you. -- Qing Li, JINMEI Tatuya, SHIMA Keiichi From owner-freebsd-net@FreeBSD.ORG Fri Mar 9 17:42:33 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DB8BD16A403 for ; Fri, 9 Mar 2007 17:42:33 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from smtp-gw1.starman.ee (smtp-out5.starman.ee [85.253.0.7]) by mx1.freebsd.org (Postfix) with ESMTP id 9CEB913C442 for ; Fri, 9 Mar 2007 17:42:33 +0000 (UTC) (envelope-from hadara@bsd.ee) Received: from mx1.starman.ee (mx1.starman.ee [62.65.192.16]) by smtp-gw1.starman.ee (Postfix) with ESMTP id 229B8A21885; Fri, 9 Mar 2007 19:42:32 +0200 (EET) Received: from haigemalt_ei_osanud_smtp_serverit_confida_voi.starman.ee (depression.softematic.com [62.65.205.81]) by mx1.starman.ee (Postfix) with ESMTP id 91EE823C56C; Fri, 9 Mar 2007 19:42:31 +0200 (EET) From: Sven Petai To: freebsd-net@freebsd.org Date: Fri, 9 Mar 2007 19:42:48 +0200 User-Agent: KMail/1.9.5 References: <200703090111.40417.hadara@bsd.ee> <2a41acea0703081550s44605ba9o301e04e01e25aef6@mail.gmail.com> <200703091342.42495.hadara@bsd.ee> In-Reply-To: <200703091342.42495.hadara@bsd.ee> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703091942.48734.hadara@bsd.ee> X-Virus-Scanned: by Amavisd-New at mx1.starman.ee Cc: Jack Vogel Subject: Re: em problems on supermicro 5015M-MT+ 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: Fri, 09 Mar 2007 17:42:34 -0000 On Friday 09 March 2007 13:42, Sven Petai wrote: > On Friday 09 March 2007 01:50, Jack Vogel wrote: > > On 3/8/07, Sven Petai wrote: > > > > I am not sure why the 32/64 bit architecture is making a difference, > > however, you have the 573 NIC, so before doing anything else run this DOS > > app, it will patch your eeprom if needed, the problem is a misprogramed > > MANC register that tends to eat packets when it shouldnt. > > the utility said the fix was not needed and symptoms didn't change either. > > > Please let me know if that helps. > > Oh, you arent using TSO by some chance are you? > > no damn I feel so stupid right now... it turns out that datacenter guys had just connected the 32 bit box to other switch than the 64 bit boxes and it never really occured to me to doublecheck that part of the story. It was really just the connection between the switches that was broken. sorry for the misinformation. From owner-freebsd-net@FreeBSD.ORG Sat Mar 10 03:18:06 2007 Return-Path: X-Original-To: net@FreeBSD.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A161016A403 for ; Sat, 10 Mar 2007 03:18:06 +0000 (UTC) (envelope-from bde@zeta.org.au) Received: from mailout2.pacific.net.au (mailout2-3.pacific.net.au [61.8.2.226]) by mx1.freebsd.org (Postfix) with ESMTP id 695AF13C478 for ; Sat, 10 Mar 2007 03:18:06 +0000 (UTC) (envelope-from bde@zeta.org.au) Received: from mailproxy1.pacific.net.au (mailproxy1.pacific.net.au [61.8.2.162]) by mailout2.pacific.net.au (Postfix) with ESMTP id 0D2B710A388; Sat, 10 Mar 2007 14:18:01 +1100 (EST) Received: from besplex.bde.org (katana.zip.com.au [61.8.7.246]) by mailproxy1.pacific.net.au (Postfix) with ESMTP id 296DC8C02; Sat, 10 Mar 2007 14:18:04 +1100 (EST) Date: Sat, 10 Mar 2007 14:18:02 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Dave Baukus In-Reply-To: <45F08F1D.5080708@us.fujitsu.com> Message-ID: <20070310135211.R9179@besplex.bde.org> References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> <45EEB086.3050409@FreeBSD.org> <45F03269.7050705@FreeBSD.org> <45F08F1D.5080708@us.fujitsu.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: net@FreeBSD.org Subject: Re: netisr_direct 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: Sat, 10 Mar 2007 03:18:06 -0000 On Thu, 8 Mar 2007, Dave Baukus wrote: > What's the word on netisr_direct ? > Do people typically enable this feature ? I always enable it, but have never measured it doing anything useful. Under light loads, it should reduce network latency and overheads by a microsecond or two (whatever it takes to do 2 context switches (hopefully the bug that made it take 4 context switches is fixed)), but then the latency is still much larger than a microsecond or two (50 uS is unusually good and 100's of uS are common) and the overhead doesn't matter. Under heavy loads, not using it is potentially better since not using it allows queue lengths to grow longer so that the queues get processed more efficiently in bursts. However, I think there is no explicit management of queue lengths or latencies now, so machines that are too fast probably gain by doing direct dispatch if possible, since with indirect dispatch they would do the context switches to and from the netisr fast enough to keep queue lengths usually <= 1. Bruce From owner-freebsd-net@FreeBSD.ORG Sat Mar 10 03:49:25 2007 Return-Path: X-Original-To: net@freebsd.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CFC0616A400 for ; Sat, 10 Mar 2007 03:49:25 +0000 (UTC) (envelope-from kip.macy@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.229]) by mx1.freebsd.org (Postfix) with ESMTP id 8D9BD13C471 for ; Sat, 10 Mar 2007 03:49:25 +0000 (UTC) (envelope-from kip.macy@gmail.com) Received: by wr-out-0506.google.com with SMTP id 58so1595449wri for ; Fri, 09 Mar 2007 19:49:24 -0800 (PST) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=VXlVbK2kGY/tGUZ2Zdm1m7ZhpTEQXDHm3r+guTJeNn+Yxl1vTxld8tU2T4AxNlMH8Y1EnAsyHMMkMEp7+zczRw5Dp1F/ebW9iReevubmjWigHN3E4UR0KWYo77sixFbun7BIkNQ1Vo1l03XqFrOdgEwiO4A2xkvtJp8ivLyFU+0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=StBGIDlRQGfqVVNI85WkzMpmR52jwHkw9qkMRZYlAHG8NsyVn/vobeH8eBJguNUfyyS7PjMQNVpOMo7A913bwAiPxyav9NOS6Lr9gLJeD7crExWUjyX0SETZ1RiPoKp96pwKjmQ3rJe+tHdM8WRXJIqy8PlkAEh4F27LZUX7/rA= Received: by 10.90.79.6 with SMTP id c6mr268719agb.1173497099298; Fri, 09 Mar 2007 19:24:59 -0800 (PST) Received: by 10.90.25.1 with HTTP; Fri, 9 Mar 2007 19:24:59 -0800 (PST) Message-ID: Date: Fri, 9 Mar 2007 19:24:59 -0800 From: "Kip Macy" To: "Dave Baukus" In-Reply-To: <45F08F1D.5080708@us.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> <45EEB086.3050409@FreeBSD.org> <45F03269.7050705@FreeBSD.org> <45F08F1D.5080708@us.fujitsu.com> Cc: net@freebsd.org Subject: Re: netisr_direct 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: Sat, 10 Mar 2007 03:49:25 -0000 On 3/8/07, Dave Baukus wrote: > What's the word on netisr_direct ? > Do people typically enable this feature ? It really varies with workload. For a small number of streams I get much better throughput with it enabled for a 10GigE link. -Kip From owner-freebsd-net@FreeBSD.ORG Sat Mar 10 03:54:54 2007 Return-Path: X-Original-To: net@freebsd.org Delivered-To: freebsd-net@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3540D16A401 for ; Sat, 10 Mar 2007 03:54:54 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.freebsd.org (Postfix) with ESMTP id 0CF6F13C48D for ; Sat, 10 Mar 2007 03:54:54 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id ADFF846D66; Fri, 9 Mar 2007 22:54:53 -0500 (EST) Date: Sat, 10 Mar 2007 03:54:53 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Dave Baukus In-Reply-To: <45F08F1D.5080708@us.fujitsu.com> Message-ID: <20070310035135.B30274@fledge.watson.org> References: <45C0CA5D.5090903@incunabulum.net> <45E6BEE0.2050307@FreeBSD.org> <45E6C22D.7060200@freebsd.org> <45E6D70C.10104@FreeBSD.org> <45EEB086.3050409@FreeBSD.org> <45F03269.7050705@FreeBSD.org> <45F08F1D.5080708@us.fujitsu.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: net@freebsd.org Subject: Re: netisr_direct 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: Sat, 10 Mar 2007 03:54:54 -0000 University of Cambridge On Thu, 8 Mar 2007, Dave Baukus wrote: > What's the word on netisr_direct ? Do people typically enable this feature ? Direct dispatch is the default configuration for the network stack in FreeBSD 7.x. Many users have reported performance improvements, especially in high packets-per-second receive environments. However, some users have reported performance loss on some SMP systems with some workloads. Direct dispatch will generally significantly lower the overhead of in-bound packet processing in the network stack by avoiding context switches. It also introduces parallelism in the in-bound network layer processing path by allowing processing to occur in more than one thread at a time. However, you can see reduced parallelism in some environments as the ithread no longer run concurrently with the netisr. I would not use net.isr.direct in versions of FreeBSD before 6.1, but it should be pretty safe for 6.1 and later. Robert N M Watson Computer Laboratory University of Cambridge > > net/netisr.c: > static int netisr_direct = 0; > SYSCTL_INT(_net_isr, OID_AUTO, direct, CTLFLAG_RW, > &netisr_direct, 0, "enable direct dispatch"); > TUNABLE_INT("net.isr.direct", &netisr_direct); > > > /* > * Do direct dispatch only for MPSAFE netisrs (and > * only when enabled). Note that when a netisr is > * marked MPSAFE we permit multiple concurrent instances > * to run. We guarantee only the order in which > * packets are processed for each "dispatch point" in > * the system (i.e. call to netisr_dispatch or > * netisr_queue). This insures ordering of packets > * from an interface but does not guarantee ordering > * between multiple places in the system (e.g. IP > * dispatched from interfaces vs. IP queued from IPSec). > */ > if (netisr_direct && (ni->ni_flags & NETISR_MPSAFE)) { > isrstat.isrs_directed++; > /* > * NB: We used to drain the queue before handling > * the packet but now do not. Doing so here will > * not preserve ordering so instead we fallback to > * guaranteeing order only from dispatch points > * in the system (see above). > */ > ni->ni_handler(m); > > -- > Dave Baukus > david.baukus@us.fujitsu.com > 972-479-2491 > > Fujitsu Network Communications > Richardson, Texas > USA > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > From owner-freebsd-net@FreeBSD.ORG Sat Mar 10 05:13:24 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DD7A916A402 for ; Sat, 10 Mar 2007 05:13:24 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from mail2.fluidhosting.com (mx24.fluidhosting.com [204.14.89.7]) by mx1.freebsd.org (Postfix) with SMTP id 7ACDE13C48E for ; Sat, 10 Mar 2007 05:13:24 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: (qmail 3675 invoked by uid 399); 10 Mar 2007 05:13:23 -0000 Received: from localhost (HELO ?192.168.0.4?) (dougb@dougbarton.us@127.0.0.1) by localhost with SMTP; 10 Mar 2007 05:13:23 -0000 X-Originating-IP: 127.0.0.1 Message-ID: <45F23E6A.9020205@FreeBSD.org> Date: Fri, 09 Mar 2007 21:13:14 -0800 From: Doug Barton Organization: http://www.FreeBSD.org/ User-Agent: Thunderbird 2.0b2 (Windows/20070116) MIME-Version: 1.0 To: Jason Arnaute References: <888880.69225.qm@web51015.mail.yahoo.com> In-Reply-To: <888880.69225.qm@web51015.mail.yahoo.com> X-Enigmail-Version: 0.94.2.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: "Bruce A. Mah" , freebsd-net@freebsd.org Subject: Re: what is wrong with ipv6_defaultrouter ? 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: Sat, 10 Mar 2007 05:13:24 -0000 Jason Arnaute wrote: > --- "Bruce A. Mah" wrote: > >> If memory serves me right, Jason Arnaute wrote: >>> (FreeBSD 6.2-RELEASE) >>> >>> I have two ipv6 related lines in my /etc/rc.conf: >>> >>> ifconfig_em0_alias0="inet6 XXX::2/48" >>> ipv6_defaultrouter="XXX::1" >>> >>> When I boot like this, I do not get a default ipv6 >>> route in my routing table. 'netstat -rn' shows me >> a >>> default route for ipv4, but no default route for >> ipv6. >> >> You probably want to replace that first line with: >> >> ipv6_ifconfig_em0="XXX::2/48" >> >> Also make sure to set ipv6_enable="YES". > > > But the ipv6 ifconfig and the ipv6 networking all work > fine without either of those changes. I'd prefer not > to fix anything that isn't broken ... There is a difference between "what I need to type after the system is up" and "what I need to add to rc.conf so that the boot scripts understand what I'm trying to do." Read the rc.conf man page, and particularly the ipv6_network_interfaces entry. > Are you suggesting that one or both of those changes > will cause the ipv6_defaultrouter declaration to > suddenly begin working ? You can't have a default route for an interface that isn't up, and you can't do IPv6 at boot without ipv6_enable, so yes, both are required. hth, Doug -- This .signature sanitized for your protection From owner-freebsd-net@FreeBSD.ORG Sat Mar 10 15:35:39 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BA57D16A401 for ; Sat, 10 Mar 2007 15:35:39 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (comp.chem.msu.su [158.250.32.97]) by mx1.freebsd.org (Postfix) with ESMTP id 1D01013C478 for ; Sat, 10 Mar 2007 15:35:38 +0000 (UTC) (envelope-from yar@comp.chem.msu.su) Received: from comp.chem.msu.su (localhost [127.0.0.1]) by comp.chem.msu.su (8.13.4/8.13.4) with ESMTP id l2AFZYAc036500 for ; Sat, 10 Mar 2007 18:35:34 +0300 (MSK) (envelope-from yar@comp.chem.msu.su) Received: (from yar@localhost) by comp.chem.msu.su (8.13.4/8.13.4/Submit) id l2AFZY1V036499 for freebsd-net@freebsd.org; Sat, 10 Mar 2007 18:35:34 +0300 (MSK) (envelope-from yar) Date: Sat, 10 Mar 2007 18:35:34 +0300 From: Yar Tikhiy To: freebsd-net@freebsd.org Message-ID: <20070310153534.GA35834@comp.chem.msu.su> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.9i Subject: Who is to load dummynet.ko? 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: Sat, 10 Mar 2007 15:35:39 -0000 Hi folks, Just noticed that neither ipfw(8) nor /etc/rc.d/ipfw cares to load dummynet.ko. It can result in a broken setup when one migrates from a custom monolithic kernel to GENERIC with modules, which is a nice way to reduce support headache today. There are at least two possible ways to deal with the issue. The easy way is to give the task of loading dummynet.ko to /etc/rc.d/ipfw. The problem with it is that the script cannot know in advance if dummynet is really used by the ipfw rules to be loaded. The decision whether to load the module is left to rc.conf(5) in this case. The second way is to move the task of loading modules to ipfw(8). Then it could load ipfw.ko, divert.ko, and dummynet.ko on demand. Comments? -- Yar