Whoops, that patch was buggy. Take #2.
--- br_input.c.orig Fri Dec 7 21:11:27 2001 +++ br_input.c Fri Dec 7 21:34:28 2001 @@ -29,7 +29,7 @@ return 0; } -static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb) +static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb, int for_us) { struct net_device *indev; @@ -38,9 +38,11 @@ indev = skb->dev; skb->dev = &br->dev; - skb->pkt_type = PACKET_HOST; skb_push(skb, ETH_HLEN); + skb->pkt_type = PACKET_HOST; skb->protocol = eth_type_trans(skb, &br->dev); + if (!for_us) + skb->pkt_type = PACKET_OTHERHOST; NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL, br_pass_frame_up_finish); @@ -70,43 +72,29 @@ skb2 = skb_clone(skb, GFP_ATOMIC); if (skb2) { passedup = 1; - br_pass_frame_up(br, skb2); + br_pass_frame_up(br, skb2, p->state == BR_STATE_FORWARDING); } } if (skb->mac.ethernet->h_source[0] & 1) goto freeandout; - if (!passedup && - (dest[0] & 1) && - (br->dev.flags & IFF_ALLMULTI || br->dev.mc_list != NULL)) { - struct sk_buff *skb2; - - skb2 = skb_clone(skb, GFP_ATOMIC); - if (skb2) { - passedup = 1; - br_pass_frame_up(br, skb2); - } - } + if (p->state == BR_STATE_LEARNING || + p->state == BR_STATE_FORWARDING) + br_fdb_insert(br, p, skb->mac.ethernet->h_source, 0); if (br->stp_enabled && !memcmp(dest, bridge_ula, 5) && !(dest[5] & 0xF0)) goto handle_special_frame; - if (p->state == BR_STATE_LEARNING || - p->state == BR_STATE_FORWARDING) - br_fdb_insert(br, p, skb->mac.ethernet->h_source, 0); - if (p->state != BR_STATE_FORWARDING) goto freeandout; if (dest[0] & 1) { - br_flood_forward(br, skb, 1); + br_flood_forward(br, skb, !passedup); if (!passedup) - br_pass_frame_up(br, skb); - else - kfree_skb(skb); + br_pass_frame_up(br, skb, 1); return; } @@ -114,7 +102,7 @@ if (dst != NULL && dst->is_local) { if (!passedup) - br_pass_frame_up(br, skb); + br_pass_frame_up(br, skb, 1); else kfree_skb(skb); br_fdb_put(dst); _______________________________________________ Bridge mailing list [EMAIL PROTECTED] http://www.math.leidenuniv.nl/mailman/listinfo/bridge