On Thu, 01 Sep 2005 15:53:48 +0200 overet@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, > oveRetrcu_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?
overet@securitydate.it
2007-Apr-18 12:36 UTC
[Bridge] rcu_dereference() error in coldfire arch
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. Then, if i send an ICMP packet whit static ARP entries on the two hosts the packet are droped. 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