Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b4bc4a2 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller
Browse files

[NETNS][FRAGS]: Isolate the secret interval from namespaces.



Since we have one hashtable to lookup the fragment, having
different secret_interval-s for hash rebuild doesn't make
sense, so move this one to inet_frags.

The inet_frags_ctl becomes empty after this, so remove it.
The appropriate ctl table is kept read-only in namespaces.

Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e31e0bdc
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -31,18 +31,14 @@ struct inet_frag_queue {

#define INETFRAGS_HASHSZ		64

struct inet_frags_ctl {
	int secret_interval;
};

struct inet_frags {
	struct list_head	lru_list;
	struct hlist_head	hash[INETFRAGS_HASHSZ];
	rwlock_t		lock;
	u32			rnd;
	int			qsize;
	int			secret_interval;
	struct timer_list	secret_timer;
	struct inet_frags_ctl	*ctl;

	unsigned int		(*hashfn)(struct inet_frag_queue *);
	void			(*constructor)(struct inet_frag_queue *q,
+0 −1
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ struct netns_sysctl_ipv6 {
	struct ctl_table_header *table;
	struct ctl_table_header *frags_hdr;
#endif
	struct inet_frags_ctl frags;
	int bindv6only;
	int flush_delay;
	int ip6_rt_max_size;
+2 −2
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ static void inet_frag_secret_rebuild(unsigned long dummy)
	}
	write_unlock(&f->lock);

	mod_timer(&f->secret_timer, now + f->ctl->secret_interval);
	mod_timer(&f->secret_timer, now + f->secret_interval);
}

void inet_frags_init(struct inet_frags *f)
@@ -65,7 +65,7 @@ void inet_frags_init(struct inet_frags *f)

	setup_timer(&f->secret_timer, inet_frag_secret_rebuild,
			(unsigned long)f);
	f->secret_timer.expires = jiffies + f->ctl->secret_interval;
	f->secret_timer.expires = jiffies + f->secret_interval;
	add_timer(&f->secret_timer);
}
EXPORT_SYMBOL(inet_frags_init);
+2 −6
Original line number Diff line number Diff line
@@ -74,10 +74,6 @@ struct ipq {
	struct inet_peer *peer;
};

static struct inet_frags_ctl ip4_frags_ctl __read_mostly = {
	.secret_interval = 10 * 60 * HZ,
};

static struct inet_frags ip4_frags;

int ip_frag_nqueues(struct net *net)
@@ -627,7 +623,7 @@ static struct ctl_table ip4_frags_ctl_table[] = {
	{
		.ctl_name	= NET_IPV4_IPFRAG_SECRET_INTERVAL,
		.procname	= "ipfrag_secret_interval",
		.data		= &ip4_frags_ctl.secret_interval,
		.data		= &ip4_frags.secret_interval,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_jiffies,
@@ -720,7 +716,6 @@ static int ipv4_frags_init_net(struct net *net)
void __init ipfrag_init(void)
{
	ipv4_frags_init_net(&init_net);
	ip4_frags.ctl = &ip4_frags_ctl;
	ip4_frags.hashfn = ip4_hashfn;
	ip4_frags.constructor = ip4_frag_init;
	ip4_frags.destructor = ip4_frag_free;
@@ -728,6 +723,7 @@ void __init ipfrag_init(void)
	ip4_frags.qsize = sizeof(struct ipq);
	ip4_frags.match = ip4_frag_match;
	ip4_frags.frag_expire = ip_expire;
	ip4_frags.secret_interval = 10 * 60 * HZ;
	inet_frags_init(&ip4_frags);
}

+1 −5
Original line number Diff line number Diff line
@@ -70,10 +70,6 @@ struct nf_ct_frag6_queue
	__u16			nhoffset;
};

static struct inet_frags_ctl nf_frags_ctl __read_mostly = {
	.secret_interval = 10 * 60 * HZ,
};

static struct inet_frags nf_frags;
static struct netns_frags nf_init_frags;

@@ -701,7 +697,6 @@ int nf_ct_frag6_kfree_frags(struct sk_buff *skb)

int nf_ct_frag6_init(void)
{
	nf_frags.ctl = &nf_frags_ctl;
	nf_frags.hashfn = nf_hashfn;
	nf_frags.constructor = ip6_frag_init;
	nf_frags.destructor = NULL;
@@ -709,6 +704,7 @@ int nf_ct_frag6_init(void)
	nf_frags.qsize = sizeof(struct nf_ct_frag6_queue);
	nf_frags.match = ip6_frag_match;
	nf_frags.frag_expire = nf_ct_frag6_expire;
	nf_frags.secret_interval = 10 * 60 * HZ;
	nf_init_frags.timeout = IPV6_FRAG_TIMEOUT;
	nf_init_frags.high_thresh = 256 * 1024;
	nf_init_frags.low_thresh = 192 * 1024;
Loading