Juergen Pfeiffer schrieb:
Hi I didn't get bridgeing to work with Linux kernel 2.6.10 (coldfire 5485) yet. When i try to configure bridgeing with "brctl", everything seems to be ok, but i if i try to ping through my bridge, i see ARP-Request arriving on the other side, but the ARP-Responses do not go back through the bridge. Now i found the error in the coldfire specific ethernet driver: "drivers/net/fec/fec.c" The driver did not set Promiscuouse Mode correct in Hardware Registers: function fec_set_multicast_list() with error: void fec_set_multicast_list(struct net_device *dev) { // Pointer to the address list struct dev_mc_list *dmi; unsigned int crc, data; int i, j, k; // Receive the base address unsigned long base_addr = (unsigned long) dev->base_addr; if (dev->flags & IFF_PROMISC || dev->flags & IFF_ALLMULTI) { // Allow all incoming frames FEC_GALR(base_addr) = 0xFFFFFFFF; FEC_GAUR(base_addr) = 0xFFFFFFFF; return; } ... function fec_set_multicast_list() correct: void fec_set_multicast_list(struct net_device *dev) { // Pointer to the address list struct dev_mc_list *dmi; unsigned int crc, data; int i, j, k; // Receive the base address unsigned long base_addr = (unsigned long) dev->base_addr; if (dev->flags & IFF_PROMISC) { // Allow all incoming frames if ((FEC_RCR(base_addr) & FEC_RCR_PROM)==0) { FEC_ECR(base_addr) &= ~FEC_ECR_ETHEREN; FEC_RCR(base_addr) |= FEC_RCR_PROM; FEC_ECR(base_addr) |= FEC_ECR_ETHEREN; } return; } if ((FEC_RCR(base_addr) & FEC_RCR_PROM)!=0) { FEC_ECR(base_addr) &= ~FEC_ECR_ETHEREN; FEC_RCR(base_addr) &= ~FEC_RCR_PROM; FEC_ECR(base_addr) |= FEC_ECR_ETHEREN; } if (dev->flags & IFF_ALLMULTI) { // Allow all incoming frames FEC_GALR(base_addr) = 0xFFFFFFFF; FEC_GAUR(base_addr) = 0xFFFFFFFF; return; } ... after this the bridge worked fine! --
|
_______________________________________________ Bridge mailing list [email protected] https://lists.osdl.org/mailman/listinfo/bridge
