Skip to content

Commit

Permalink
[NETFILTER]: convert nfmark and conntrack mark to 32bit
Browse files Browse the repository at this point in the history
As discussed at netconf'05, we convert nfmark and conntrack-mark to be
32bits even on 64bit architectures.

Signed-off-by: Harald Welte <laforge@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Harald Welte authored and David S. Miller committed Aug 29, 2005
1 parent 8f3d17f commit bf3a46a
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 7 deletions.
2 changes: 1 addition & 1 deletion include/linux/netfilter_ipv4/ip_conntrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ struct ip_conntrack
#endif /* CONFIG_IP_NF_NAT_NEEDED */

#if defined(CONFIG_IP_NF_CONNTRACK_MARK)
unsigned long mark;
u_int32_t mark;
#endif

/* Traversed often, so hopefully in different cacheline to top */
Expand Down
2 changes: 1 addition & 1 deletion include/linux/skbuff.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ struct sk_buff {

void (*destructor)(struct sk_buff *skb);
#ifdef CONFIG_NETFILTER
unsigned long nfmark;
__u32 nfmark;
__u32 nfcache;
__u32 nfctinfo;
struct nf_conntrack *nfct;
Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/ip_conntrack_standalone.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ static int ct_seq_show(struct seq_file *s, void *v)
return -ENOSPC;

#if defined(CONFIG_IP_NF_CONNTRACK_MARK)
if (seq_printf(s, "mark=%lu ", conntrack->mark))
if (seq_printf(s, "mark=%u ", conntrack->mark))
return -ENOSPC;
#endif

Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/ipt_CLUSTERIP.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ target(struct sk_buff **pskb,
#ifdef DEBUG_CLUSTERP
DUMP_TUPLE(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
#endif
DEBUGP("hash=%u ct_hash=%lu ", hash, ct->mark);
DEBUGP("hash=%u ct_hash=%u ", hash, ct->mark);
if (!clusterip_responsible(cipinfo->config, hash)) {
DEBUGP("not responsible\n");
return NF_DROP;
Expand Down
11 changes: 8 additions & 3 deletions net/ipv4/netfilter/ipt_CONNMARK.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ target(struct sk_buff **pskb,
void *userinfo)
{
const struct ipt_connmark_target_info *markinfo = targinfo;
unsigned long diff;
unsigned long nfmark;
unsigned long newmark;
u_int32_t diff;
u_int32_t nfmark;
u_int32_t newmark;

enum ip_conntrack_info ctinfo;
struct ip_conntrack *ct = ip_conntrack_get((*pskb), &ctinfo);
Expand Down Expand Up @@ -94,6 +94,11 @@ checkentry(const char *tablename,
}
}

if (matchinfo->mark > 0xffffffff || matchinfo->mask > 0xffffffff) {
printk(KERN_WARNING "CONNMARK: Only supports 32bit mark\n");
return 0;
}

return 1;
}

Expand Down
12 changes: 12 additions & 0 deletions net/ipv4/netfilter/ipt_MARK.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ checkentry_v0(const char *tablename,
unsigned int targinfosize,
unsigned int hook_mask)
{
struct ipt_mark_target_info *markinfo = targinfo;

if (targinfosize != IPT_ALIGN(sizeof(struct ipt_mark_target_info))) {
printk(KERN_WARNING "MARK: targinfosize %u != %Zu\n",
targinfosize,
Expand All @@ -88,6 +90,11 @@ checkentry_v0(const char *tablename,
return 0;
}

if (markinfo->mark > 0xffffffff) {
printk(KERN_WARNING "MARK: Only supports 32bit wide mark\n");
return 0;
}

return 1;
}

Expand Down Expand Up @@ -120,6 +127,11 @@ checkentry_v1(const char *tablename,
return 0;
}

if (markinfo->mark > 0xffffffff) {
printk(KERN_WARNING "MARK: Only supports 32bit wide mark\n");
return 0;
}

return 1;
}

Expand Down
7 changes: 7 additions & 0 deletions net/ipv4/netfilter/ipt_connmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,16 @@ checkentry(const char *tablename,
unsigned int matchsize,
unsigned int hook_mask)
{
struct ipt_connmark_info *cm =
(struct ipt_connmark_info *)matchinfo;
if (matchsize != IPT_ALIGN(sizeof(struct ipt_connmark_info)))
return 0;

if (cm->mark > 0xffffffff || cm->mask > 0xffffffff) {
printk(KERN_WARNING "connmark: only support 32bit mark\n");
return 0;
}

return 1;
}

Expand Down
7 changes: 7 additions & 0 deletions net/ipv4/netfilter/ipt_mark.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,16 @@ checkentry(const char *tablename,
unsigned int matchsize,
unsigned int hook_mask)
{
struct ipt_mark_info *minfo = (struct ipt_mark_info *) matchinfo;

if (matchsize != IPT_ALIGN(sizeof(struct ipt_mark_info)))
return 0;

if (minfo->mark > 0xffffffff || minfo->mask > 0xffffffff) {
printk(KERN_WARNING "mark: only supports 32bit mark\n");
return 0;
}

return 1;
}

Expand Down

0 comments on commit bf3a46a

Please sign in to comment.