diff options
Diffstat (limited to 'net/ipv4/ip_fragment.c')
-rw-r--r-- | net/ipv4/ip_fragment.c | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index 2143bf30597a..a53463e594b9 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -50,7 +50,7 @@ | |||
50 | * as well. Or notify me, at least. --ANK | 50 | * as well. Or notify me, at least. --ANK |
51 | */ | 51 | */ |
52 | 52 | ||
53 | int sysctl_ipfrag_max_dist __read_mostly = 64; | 53 | static int sysctl_ipfrag_max_dist __read_mostly = 64; |
54 | 54 | ||
55 | struct ipfrag_skb_cb | 55 | struct ipfrag_skb_cb |
56 | { | 56 | { |
@@ -74,7 +74,7 @@ struct ipq { | |||
74 | struct inet_peer *peer; | 74 | struct inet_peer *peer; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | struct inet_frags_ctl ip4_frags_ctl __read_mostly = { | 77 | static struct inet_frags_ctl ip4_frags_ctl __read_mostly = { |
78 | /* | 78 | /* |
79 | * Fragment cache limits. We will commit 256K at one time. Should we | 79 | * Fragment cache limits. We will commit 256K at one time. Should we |
80 | * cross that limit we will prune down to 192K. This should cope with | 80 | * cross that limit we will prune down to 192K. This should cope with |
@@ -607,8 +607,78 @@ int ip_defrag(struct sk_buff *skb, u32 user) | |||
607 | return -ENOMEM; | 607 | return -ENOMEM; |
608 | } | 608 | } |
609 | 609 | ||
610 | #ifdef CONFIG_SYSCTL | ||
611 | static int zero; | ||
612 | |||
613 | static struct ctl_table ip4_frags_ctl_table[] = { | ||
614 | { | ||
615 | .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH, | ||
616 | .procname = "ipfrag_high_thresh", | ||
617 | .data = &ip4_frags_ctl.high_thresh, | ||
618 | .maxlen = sizeof(int), | ||
619 | .mode = 0644, | ||
620 | .proc_handler = &proc_dointvec | ||
621 | }, | ||
622 | { | ||
623 | .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH, | ||
624 | .procname = "ipfrag_low_thresh", | ||
625 | .data = &ip4_frags_ctl.low_thresh, | ||
626 | .maxlen = sizeof(int), | ||
627 | .mode = 0644, | ||
628 | .proc_handler = &proc_dointvec | ||
629 | }, | ||
630 | { | ||
631 | .ctl_name = NET_IPV4_IPFRAG_TIME, | ||
632 | .procname = "ipfrag_time", | ||
633 | .data = &ip4_frags_ctl.timeout, | ||
634 | .maxlen = sizeof(int), | ||
635 | .mode = 0644, | ||
636 | .proc_handler = &proc_dointvec_jiffies, | ||
637 | .strategy = &sysctl_jiffies | ||
638 | }, | ||
639 | { | ||
640 | .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL, | ||
641 | .procname = "ipfrag_secret_interval", | ||
642 | .data = &ip4_frags_ctl.secret_interval, | ||
643 | .maxlen = sizeof(int), | ||
644 | .mode = 0644, | ||
645 | .proc_handler = &proc_dointvec_jiffies, | ||
646 | .strategy = &sysctl_jiffies | ||
647 | }, | ||
648 | { | ||
649 | .procname = "ipfrag_max_dist", | ||
650 | .data = &sysctl_ipfrag_max_dist, | ||
651 | .maxlen = sizeof(int), | ||
652 | .mode = 0644, | ||
653 | .proc_handler = &proc_dointvec_minmax, | ||
654 | .extra1 = &zero | ||
655 | }, | ||
656 | { } | ||
657 | }; | ||
658 | |||
659 | static int ip4_frags_ctl_register(struct net *net) | ||
660 | { | ||
661 | struct ctl_table_header *hdr; | ||
662 | |||
663 | hdr = register_net_sysctl_table(net, net_ipv4_ctl_path, | ||
664 | ip4_frags_ctl_table); | ||
665 | return hdr == NULL ? -ENOMEM : 0; | ||
666 | } | ||
667 | #else | ||
668 | static inline int ip4_frags_ctl_register(struct net *net) | ||
669 | { | ||
670 | return 0; | ||
671 | } | ||
672 | #endif | ||
673 | |||
674 | static int ipv4_frags_init_net(struct net *net) | ||
675 | { | ||
676 | return ip4_frags_ctl_register(net); | ||
677 | } | ||
678 | |||
610 | void __init ipfrag_init(void) | 679 | void __init ipfrag_init(void) |
611 | { | 680 | { |
681 | ipv4_frags_init_net(&init_net); | ||
612 | ip4_frags.ctl = &ip4_frags_ctl; | 682 | ip4_frags.ctl = &ip4_frags_ctl; |
613 | ip4_frags.hashfn = ip4_hashfn; | 683 | ip4_frags.hashfn = ip4_hashfn; |
614 | ip4_frags.constructor = ip4_frag_init; | 684 | ip4_frags.constructor = ip4_frag_init; |