Hi there,
The solution that Tommy and myself have been batting around is a lot
more cleaner than this (however still doesnt solve the issue 100%)
cheers,
jamal
On Mon, 2005-01-17 at 17:13, Peter Buckingham wrote:
> Hi,
>
> Tommy Christensen wrote:
> > A proper solution would take care of both these issues: "stale packets"
> > and "socket blocking". They are pretty much related.
> >
> > Using a socket for each interface *ought* not be needed.
> > Carrier detection sounds like a good thing in its own right.
>
> I came across this same problem with multicast/unicast with an e1000.
> For a quick hack we just check to see whether the carrier is ok, if it's
> not we just drop the packet. this might do some nasty things with tcp
> and it may be better to check to see wither the socket buffer is full,
> but this works for me here... (this is against a 2.6.9ish kernel)
>
> peter
>
> Index: net/core/dev.c
> ===================================================================
> --- net/core/dev.c
> +++ net/core/dev.c
> @@ -1379,6 +1379,11 @@
> #ifdef CONFIG_NET_CLS_ACT
> skb->tc_verd = SET_TC_AT(skb->tc_verd,AT_EGRESS);
> #endif
> + if (!netif_carrier_ok(dev)) {
> + rc = NET_XMIT_DROP;
> + goto out_kfree_skb;
> + }
> +
> if (q->enqueue) {
> /* Grab device queue */
> spin_lock(&dev->queue_lock);
>
>
|