diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2008-01-22 09:09:37 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:10:37 -0500 |
commit | b2fd5321dd160ef309dfb6cfc78ed8de4a830659 (patch) | |
tree | 48d56923c239a2f5174e82528ee2632e159d33a7 /net/ipv4/ip_fragment.c | |
parent | e4a2d5c2bccd5bd29de5ae4f14ff4448fac9cfc8 (diff) |
[NETNS][FRAGS]: Make the net.ipv4.ipfrag_timeout work in namespaces.
Move it to the netns_frags, adjust the usage and
make the appropriate ctl table writable.
Now fragment, that live in different namespaces can
live for different times.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_fragment.c')
-rw-r--r-- | net/ipv4/ip_fragment.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index c51e1a11dc6b..70d241c8d2a8 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -83,13 +83,6 @@ static struct inet_frags_ctl ip4_frags_ctl __read_mostly = { | |||
83 | */ | 83 | */ |
84 | .high_thresh = 256 * 1024, | 84 | .high_thresh = 256 * 1024, |
85 | .low_thresh = 192 * 1024, | 85 | .low_thresh = 192 * 1024, |
86 | |||
87 | /* | ||
88 | * Important NOTE! Fragment queue must be destroyed before MSL expires. | ||
89 | * RFC791 is wrong proposing to prolongate timer each fragment arrival | ||
90 | * by TTL. | ||
91 | */ | ||
92 | .timeout = IP_FRAG_TIME, | ||
93 | .secret_interval = 10 * 60 * HZ, | 86 | .secret_interval = 10 * 60 * HZ, |
94 | }; | 87 | }; |
95 | 88 | ||
@@ -287,7 +280,7 @@ static int ip_frag_reinit(struct ipq *qp) | |||
287 | { | 280 | { |
288 | struct sk_buff *fp; | 281 | struct sk_buff *fp; |
289 | 282 | ||
290 | if (!mod_timer(&qp->q.timer, jiffies + ip4_frags_ctl.timeout)) { | 283 | if (!mod_timer(&qp->q.timer, jiffies + qp->q.net->timeout)) { |
291 | atomic_inc(&qp->q.refcnt); | 284 | atomic_inc(&qp->q.refcnt); |
292 | return -ETIMEDOUT; | 285 | return -ETIMEDOUT; |
293 | } | 286 | } |
@@ -633,7 +626,7 @@ static struct ctl_table ip4_frags_ctl_table[] = { | |||
633 | { | 626 | { |
634 | .ctl_name = NET_IPV4_IPFRAG_TIME, | 627 | .ctl_name = NET_IPV4_IPFRAG_TIME, |
635 | .procname = "ipfrag_time", | 628 | .procname = "ipfrag_time", |
636 | .data = &ip4_frags_ctl.timeout, | 629 | .data = &init_net.ipv4.frags.timeout, |
637 | .maxlen = sizeof(int), | 630 | .maxlen = sizeof(int), |
638 | .mode = 0644, | 631 | .mode = 0644, |
639 | .proc_handler = &proc_dointvec_jiffies, | 632 | .proc_handler = &proc_dointvec_jiffies, |
@@ -672,7 +665,7 @@ static int ip4_frags_ctl_register(struct net *net) | |||
672 | 665 | ||
673 | table[0].mode &= ~0222; | 666 | table[0].mode &= ~0222; |
674 | table[1].mode &= ~0222; | 667 | table[1].mode &= ~0222; |
675 | table[2].mode &= ~0222; | 668 | table[2].data = &net->ipv4.frags.timeout; |
676 | table[3].mode &= ~0222; | 669 | table[3].mode &= ~0222; |
677 | table[4].mode &= ~0222; | 670 | table[4].mode &= ~0222; |
678 | } | 671 | } |
@@ -712,6 +705,13 @@ static inline void ip4_frags_ctl_unregister(struct net *net) | |||
712 | 705 | ||
713 | static int ipv4_frags_init_net(struct net *net) | 706 | static int ipv4_frags_init_net(struct net *net) |
714 | { | 707 | { |
708 | /* | ||
709 | * Important NOTE! Fragment queue must be destroyed before MSL expires. | ||
710 | * RFC791 is wrong proposing to prolongate timer each fragment arrival | ||
711 | * by TTL. | ||
712 | */ | ||
713 | net->ipv4.frags.timeout = IP_FRAG_TIME; | ||
714 | |||
715 | inet_frags_init_net(&net->ipv4.frags); | 715 | inet_frags_init_net(&net->ipv4.frags); |
716 | 716 | ||
717 | return ip4_frags_ctl_register(net); | 717 | return ip4_frags_ctl_register(net); |