[Bridge] rcu_dereference() error in coldfire arch
Stephen Hemminger
shemminger at osdl.org
Thu Sep 1 10:10:37 PDT 2005
On Thu, 01 Sep 2005 15:53:48 +0200
overet at securitydate.it wrote:
> Hi,
> i'm trying to develop an embedded system with ColdFire architecture (similar
> at m68k) and i have some problems.
>
> The bridge module is loaded properly in the kernel. When an ARP packet is
> sent to the port of the bridge there are 2 situations:
>
> - If destination MAC address is FF:FF:FF:FF:FF:FF the packet is forwarded.
> - If destination MAC address is not a broadcast address the packet is
> droped.
Have you waited long enough for the bridge port to get out of
the LEARNING state?
> Then, if i send an ICMP packet whit static ARP entries on the two hosts the
> packet are droped.
What is the contents of the bridge forwarding table?
brctl showmacs br0
> So, i look in the source tree to search the bug and i can see that in the
> handle_bridge() function in net/core/dev.c at this point:
> ---------------------------------------------------------------------
> if ((*pskb)->pkt_type == PACKET_LOOPBACK ||
> (port = rcu_dereference((*pskb)->dev->br_port)) == NULL)
> return 0;
> ---------------------------------------------------------------------
> the condition if () succeded whit port == NULL (but it shouldn't) and the
> packet are droped.
>
> How can i do to resolv this problem in m68k compliant architecture?
>
> Best regards,
> oveRet
rcu_dereference is a macro that does nothing except on SMP Alpha.
So think of it as:
#define rcu_dereference(x) (x)
That test in net/core/dev.c says:
if packet is loopback
or device is not a member of a bridge
then return 0 (don't pass it to bridge)
Are you sure that the ethernet device you are using correctly sets
the pkt_type and the device pointer on received packets before
calling netif_receive?
More information about the Bridge
mailing list