Ok, I think found the last patch you posted, comments below (I have to
run off soon):
On Fri, 2006-30-06 at 19:13 +0200, Thomas Graf wrote:
> There you go, leaves ifb broken as-is, at least prevents it
> from crashing randomly when the input_dev disappears.
>
I hope the above comment does show up in the logs ;->
> [NET]: Use interface index to keep input device information
>
> ===================================================================
> --- net-2.6.git.orig/include/net/pkt_cls.h
> +++ net-2.6.git/include/net/pkt_cls.h
> @@ -352,14 +352,19 @@ tcf_change_indev(struct tcf_proto *tp, c
> static inline int
> tcf_match_indev(struct sk_buff *skb, char *indev)
> {
> + int ret = 1;
> +
> if (indev[0]) {
> - if (!skb->input_dev)
> - return 0;
> - if (strcmp(indev, skb->input_dev->name))
> + struct net_device *dev;
> +
> + dev = dev_get_by_index(skb->iif);
> + if (!dev)
> return 0;
> + ret = !strcmp(indev, dev->name);
> + dev_put(dev);
> }
>
[..]
> Index: net-2.6.git/drivers/net/ifb.c
> ===================================================================
> --- net-2.6.git.orig/drivers/net/ifb.c
> +++ net-2.6.git/drivers/net/ifb.c
> @@ -158,19 +158,23 @@ static int ifb_xmit(struct sk_buff *skb,
> stats->tx_packets++;
> stats->tx_bytes+=skb->len;
>
> - if (!from || !skb->input_dev) {
> + if (!from || !skb->iif) {
Can you have something similar to what you did in
tcf_match_indev above?
i.e grab dev by skb->iif so as to increment refcount - if it doesnt
exist it becomes equivalent to !skb->input_dev and if it exists you drop
the ref inside the else below after changing input_dev
> dev_kfree_skb(skb);
> stats->rx_dropped++;
> return ret;
> } else {
> + struct net_device *iif;
> /*
> * note we could be going
> * ingress -> egress or
> * egress -> ingress
> */
> - skb->dev = skb->input_dev;
> - skb->input_dev = dev;
> + iif = __dev_get_by_index(skb->iif);
> + if (!iif)
> + goto dropped;
> + skb->dev = iif;
> + skb->iif = dev->ifindex;
> if (from & AT_INGRESS) {
> skb_pull(skb, skb->dev->hard_header_len);
> } else {
> -
cheers,
jamal
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html