Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Feb 2001 13:53:12 -0800 (PST)
From:      Luigi Rizzo <rizzo@aciri.org>
To:        julian@elischer.org (Julian Elischer)
Cc:        rizzo@aciri.org, patrick@netzuno.com, freebsd-net@FreeBSD.ORG, richw@webcom.com, julian@FreeBSD.ORG
Subject:   Re: BRIDGE breaks ARP? (more info)
Message-ID:  <200102052153.f15LrCH25651@iguana.aciri.org>
In-Reply-To: <3A7F0806.9B81D98@elischer.org> from Julian Elischer at "Feb 5, 2001 12: 7:34 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> [Charset iso-8859-15 unsupported, skipping...]
> Luigi.. does this fix it?

it looks like it essentially reverts to the old (1.75) behaviour,
which means it does not fix bugs, it is only a workaround to let
people run kernels with bridging compiled-in as if it was not
compiled-in.

I think the problem people were (and still will be)
having is the following:

when bridging is compiled in (and now, when bridging is enabled),
arp requests do not consider the interface from which the request
cam from.

This is ok as long as you have bridging enabled on all of your
interfaces, but there are some cases where you are doing bridging
separately on clusters of interfaces, and/or no bridging at all on
others, and then you need to look only at those interfaces which
belong to the same "logical ethernet" as the IF from which you got
the packet.  This could be a single interface on which bridging is
disabled, or interfaces with the same cluster-id in
net.link.ether.bridge_cfg.

If people wonders what is this "cluster-id" -- that code comes
from some unreleased code that i wrote in 2.2.x times
which makes FreeBSD work as a VLAN bridge.
So the cluster-id is essentially the VLAN-ID, and the
special ID 0 corresponds to a "trunk" (where essentially
all traffic goes prefixed with the VLAN header).

	cheers
	luigi

> 
> 
> 
>         (void)memcpy(&itaddr, ea->arp_tpa, sizeof (itaddr));
>         TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) {
> #ifdef BRIDGE
>                 /*
>                  * For a bridge, we want to check the address irrespective
>                  * of the receive interface. (This will change slightly
>                  * when we have clusters of interfaces).
>                  */
> #define BRIDGE_TEST (do_bridge)
> #else
> #define BRIDGE_TEST 0 /* cc will optiise the test away */
> #endif
>                 if ((BRIDGE_TEST) || (ia->ia_ifp == &ac->ac_if)) {
>                         maybe_ia = ia;
>                         if ((itaddr.s_addr == ia->ia_addr.sin_addr.s_addr) ||
>                              (isaddr.s_addr == ia->ia_addr.sin_addr.s_addr)) {
> 
> 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200102052153.f15LrCH25651>