Hopefully this makes my point to Patrick earlier about regression
testing? ;-> Good effort Thomas.
cheers,
jamal
On Wed, 2004-12-15 at 08:01, Thomas Graf wrote:
> Dave,
>
> This should go in before 2.6.10. It fixes a forgotten case to provide
> police backward compatibility statistics for old iproute2 versions
> running on a new kernel with actions enabled. Should make distributions
> happy with older iproute2 versions and all-included kernel configs
> since they probably favour actions over plain policer.
>
> Testing results:
> iproute2-2.4.7 on 2.6.10-rc3-bk8:
> cls-police: police creation succeeded
> cls-police: Sending 10 ICMP echo requests
> cls-police: police dumping succeeded with output:
> filter protocol ip pref 10 u32
> filter protocol ip pref 10 u32 fh 800: ht divisor 1
> filter protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0
> flowid 10:12
> police 3 action drop rate 2Kbit burst 10Kb mtu 2Kb
> match 00010000/00ff0000 at 8
> Sent 420 bytes 10 pkts (dropped 0, overlimits 0) <-- This would have been
> missing
> cls-police: police deletion succeeded
>
> iproute2-2.6.9 on 2.6.10-rc3-bk8:
> ...
> filter protocol ip pref 10 u32
> filter protocol ip pref 10 u32 fh 800: ht divisor 1
> filter protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0
> flowid 10:12 (rule hit 10 success 10)
> match 00010000/00ff0000 at 8 (success 10 )
> police 0x4 rate 2000bit burst 10Kb mtu 2Kb action drop
> ref 1 bind 1
> Sent 420 bytes 10 pkts (dropped 0, overlimits 0)
> ...
>
> (Same results for fw classifier)
>
> Signed-off-by: Thomas Graf <tgraf@xxxxxxx>
>
> --- linux-2.6.10-rc3-bk7.orig/net/sched/act_api.c 2004-12-14
> 14:24:34.000000000 +0100
> +++ linux-2.6.10-rc3-bk7/net/sched/act_api.c 2004-12-14 16:15:13.000000000
> +0100
> @@ -418,6 +418,7 @@
>
> int tcf_action_copy_stats (struct sk_buff *skb,struct tc_action *a)
> {
> + int err;
> struct gnet_dump d;
> struct tcf_act_hdr *h = a->priv;
>
> @@ -428,7 +429,14 @@
> if (NULL == h)
> goto errout;
>
> - if (gnet_stats_start_copy(skb, TCA_ACT_STATS, h->stats_lock, &d) < 0)
> + if (a->type == TCA_OLD_COMPAT)
> + err = gnet_stats_start_copy_compat(skb, TCA_ACT_STATS,
> + TCA_STATS, TCA_XSTATS, h->stats_lock, &d);
> + else
> + err = gnet_stats_start_copy(skb, TCA_ACT_STATS,
> + h->stats_lock, &d);
> +
> + if (err < 0)
> goto errout;
>
> if (NULL != a->ops && NULL != a->ops->get_stats)
>
>
|