]> err.no Git - linux-2.6/blobdiff - net/netfilter/xt_DSCP.c
Merge branch 'for-rmk' of git://aeryn.fluff.org.uk/bjdooks/linux
[linux-2.6] / net / netfilter / xt_DSCP.c
index fd7500ecadfdcb324a6bb9ad6d4fd35c070f38cb..97efd74c04fef2c91899c3d773b184bf96d2dfdc 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/netfilter_ipv4/ipt_TOS.h>
 
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
-MODULE_DESCRIPTION("x_tables DSCP modification module");
+MODULE_DESCRIPTION("Xtables: DSCP/TOS field modification");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("ipt_DSCP");
 MODULE_ALIAS("ip6t_DSCP");
@@ -128,13 +128,13 @@ tos_tg(struct sk_buff *skb, const struct net_device *in,
        u_int8_t orig, nv;
 
        orig = ipv4_get_dsfield(iph);
-       nv   = (orig & info->tos_mask) ^ info->tos_value;
+       nv   = (orig & ~info->tos_mask) ^ info->tos_value;
 
        if (orig != nv) {
                if (!skb_make_writable(skb, sizeof(struct iphdr)))
                        return NF_DROP;
                iph = ip_hdr(skb);
-               ipv4_change_dsfield(iph, ~0, nv);
+               ipv4_change_dsfield(iph, 0, nv);
        }
 
        return XT_CONTINUE;
@@ -156,7 +156,7 @@ tos_tg6(struct sk_buff *skb, const struct net_device *in,
                if (!skb_make_writable(skb, sizeof(struct iphdr)))
                        return NF_DROP;
                iph = ipv6_hdr(skb);
-               ipv6_change_dsfield(iph, ~0, nv);
+               ipv6_change_dsfield(iph, 0, nv);
        }
 
        return XT_CONTINUE;