net: sctp: convert sctp_checksum_disable module param into sctp sysctl
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 6 Aug 2013 19:18:12 +0000 (21:18 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Aug 2013 18:33:02 +0000 (11:33 -0700)
Get rid of the last module parameter for SCTP and make this
configurable via sysctl for SCTP like all the rest of SCTP's
configuration knobs.

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/ip-sysctl.txt
include/net/netns/sctp.h
include/net/sctp/structs.h
net/sctp/input.c
net/sctp/output.c
net/sctp/protocol.c
net/sctp/sysctl.c

index 36be26b2ef7af81407771420e3e146099bf6b468..1b27b0b8687f988180b7c17dcffbddfc11a34807 100644 (file)
@@ -1507,6 +1507,14 @@ sack_timeout - INTEGER
 
        Default: 200
 
+checksum_disable - BOOLEAN
+       Disable SCTP checksum computing and verification for debugging purpose.
+
+       1: Disable checksumming
+       0: Enable checksumming
+
+       Default: 0
+
 valid_cookie_life - INTEGER
        The default lifetime of the SCTP cookie (in milliseconds).  The cookie
        is used during association establishment.
index 3573a81815ad9e0efb6ceb721eb066d3726419f0..ebfdf1e7d4023d7ac81f7b3ec6ca3246510b60ee 100644 (file)
@@ -129,6 +129,9 @@ struct netns_sctp {
 
        /* Threshold for autoclose timeout, in seconds. */
        unsigned long max_autoclose;
+
+       /* Flag to disable SCTP checksumming. */
+       int checksum_disable;
 };
 
 #endif /* __NETNS_SCTP_H__ */
index d9c93a77b1a94f5383cf6a93611f1eee79b95cc7..06ebeaaaa9aaf622919735ce09608f87938c4971 100644 (file)
@@ -141,10 +141,6 @@ extern struct sctp_globals {
        /* This is the sctp port control hash.  */
        int port_hashsize;
        struct sctp_bind_hashbucket *port_hashtable;
-
-       /* Flag to indicate whether computing and verifying checksum
-        * is disabled. */
-        bool checksum_disable;
 } sctp_globals;
 
 #define sctp_max_instreams             (sctp_globals.max_instreams)
@@ -156,7 +152,6 @@ extern struct sctp_globals {
 #define sctp_assoc_hashtable           (sctp_globals.assoc_hashtable)
 #define sctp_port_hashsize             (sctp_globals.port_hashsize)
 #define sctp_port_hashtable            (sctp_globals.port_hashtable)
-#define sctp_checksum_disable          (sctp_globals.checksum_disable)
 
 /* SCTP Socket type: UDP or TCP style. */
 typedef enum {
index fa91aff0238874ae21682c87abc27a640cf19401..b9a25e18bb2b8db62fab12011092f2945ae0df8d 100644 (file)
@@ -140,8 +140,8 @@ int sctp_rcv(struct sk_buff *skb)
        __skb_pull(skb, skb_transport_offset(skb));
        if (skb->len < sizeof(struct sctphdr))
                goto discard_it;
-       if (!sctp_checksum_disable && !skb_csum_unnecessary(skb) &&
-                 sctp_rcv_checksum(net, skb) < 0)
+       if (!net->sctp.checksum_disable && !skb_csum_unnecessary(skb) &&
+           sctp_rcv_checksum(net, skb) < 0)
                goto discard_it;
 
        skb_pull(skb, sizeof(struct sctphdr));
index 5a55c55d71ad53245f91120a84df0c2e7661c38b..cdb5f4914e1790832ea6fa1ad0700bffb3a9958c 100644 (file)
@@ -395,6 +395,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
        int padding;            /* How much padding do we need?  */
        __u8 has_data = 0;
        struct dst_entry *dst = tp->dst;
+       struct net *net;
        unsigned char *auth = NULL;     /* pointer to auth in skb data */
        __u32 cksum_buf_len = sizeof(struct sctphdr);
 
@@ -541,7 +542,9 @@ int sctp_packet_transmit(struct sctp_packet *packet)
         * Note: Adler-32 is no longer applicable, as has been replaced
         * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>.
         */
-       if (!sctp_checksum_disable) {
+       net = dev_net(dst->dev);
+
+       if (!net->sctp.checksum_disable) {
                if (!(dst->dev->features & NETIF_F_SCTP_CSUM)) {
                        __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len);
 
index b52ec251010155793c11e49f88ff7dbf4f94c95e..a570a6365f87a3b8710ab87f7b0ee94abfcb0072 100644 (file)
@@ -1193,6 +1193,9 @@ static int __net_init sctp_net_init(struct net *net)
        /* Whether Cookie Preservative is enabled(1) or not(0) */
        net->sctp.cookie_preserve_enable        = 1;
 
+       /* Whether SCTP checksumming is disabled(1) or not(0) */
+       net->sctp.checksum_disable              = 0;
+
        /* Default sctp sockets to use md5 as their hmac alg */
 #if defined (CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5)
        net->sctp.sctp_hmac_alg                 = "md5";
@@ -1549,6 +1552,4 @@ MODULE_ALIAS("net-pf-" __stringify(PF_INET) "-proto-132");
 MODULE_ALIAS("net-pf-" __stringify(PF_INET6) "-proto-132");
 MODULE_AUTHOR("Linux Kernel SCTP developers <linux-sctp@vger.kernel.org>");
 MODULE_DESCRIPTION("Support for the SCTP protocol (RFC2960)");
-module_param_named(no_checksums, sctp_checksum_disable, bool, 0644);
-MODULE_PARM_DESC(no_checksums, "Disable checksums computing and verification");
 MODULE_LICENSE("GPL");
index 190674702b202c885c8c9a3d7e7304e8f3871216..754809a7183d72765318dcee599ed3710f04f840 100644 (file)
@@ -296,7 +296,15 @@ static struct ctl_table sctp_net_table[] = {
                .extra1         = &max_autoclose_min,
                .extra2         = &max_autoclose_max,
        },
-
+       {
+               .procname       = "checksum_disable",
+               .data           = &init_net.sctp.checksum_disable,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &zero,
+               .extra2         = &one,
+       },
        { /* sentinel */ }
 };