/* - functions */
 extern int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
-                              struct sock *sk, struct request_sock *req,
-                              struct sk_buff *skb);
+                              const struct sock *sk,
+                              const struct request_sock *req,
+                              const struct sk_buff *skb);
 extern struct tcp_md5sig_key * tcp_v4_md5_lookup(struct sock *sk,
                                                 struct sock *addr_sk);
 extern int tcp_v4_md5_do_add(struct sock *sk, __be32 addr, u8 *newkey,
                                                struct sock *addr_sk);
        int                     (*calc_md5_hash) (char *location,
                                                  struct tcp_md5sig_key *md5,
-                                                 struct sock *sk,
-                                                 struct request_sock *req,
-                                                 struct sk_buff *skb);
+                                                 const struct sock *sk,
+                                                 const struct request_sock *req,
+                                                 const struct sk_buff *skb);
        int                     (*md5_add) (struct sock *sk,
                                            struct sock *addr_sk,
                                            u8 *newkey,
                                                struct request_sock *req);
        int                     (*calc_md5_hash) (char *location,
                                                  struct tcp_md5sig_key *md5,
-                                                 struct sock *sk,
-                                                 struct request_sock *req,
-                                                 struct sk_buff *skb);
+                                                 const struct sock *sk,
+                                                 const struct request_sock *req,
+                                                 const struct sk_buff *skb);
 #endif
 };
 
 
 static struct tcp_md5sig_key *tcp_v4_md5_do_lookup(struct sock *sk,
                                                   __be32 addr);
 static int tcp_v4_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
-                              __be32 daddr, __be32 saddr, struct tcphdr *th);
+                              __be32 daddr, __be32 saddr, const struct tcphdr *th);
 #else
 static inline
 struct tcp_md5sig_key *tcp_v4_md5_do_lookup(struct sock *sk, __be32 addr)
 }
 
 static int tcp_v4_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
-                              __be32 daddr, __be32 saddr, struct tcphdr *th)
+                              __be32 daddr, __be32 saddr, const struct tcphdr *th)
 {
        struct tcp_md5sig_pool *hp;
        struct hash_desc *desc;
 }
 
 int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
-                       struct sock *sk, struct request_sock *req,
-                       struct sk_buff *skb)
+                       const struct sock *sk, const struct request_sock *req,
+                       const struct sk_buff *skb)
 {
        struct tcp_md5sig_pool *hp;
        struct hash_desc *desc;
-       struct tcphdr *th = tcp_hdr(skb);
+       const struct tcphdr *th = tcp_hdr(skb);
        __be32 saddr, daddr;
 
        if (sk) {
 }
 EXPORT_SYMBOL(tcp_v4_md5_hash_skb);
 
-static int tcp_v4_inbound_md5_hash(struct sock *sk, struct sk_buff *skb)
+static int tcp_v4_inbound_md5_hash(struct sock *sk, const struct sk_buff *skb)
 {
        /*
         * This gets called for each TCP segment that arrives
 
 
 static int tcp_v6_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
                               const struct in6_addr *daddr, struct in6_addr *saddr,
-                              struct tcphdr *th)
+                              const struct tcphdr *th)
 {
        struct tcp_md5sig_pool *hp;
        struct hash_desc *desc;
 }
 
 static int tcp_v6_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
-                              struct sock *sk, struct request_sock *req,
-                              struct sk_buff *skb)
+                              const struct sock *sk,
+                              const struct request_sock *req,
+                              const struct sk_buff *skb)
 {
        const struct in6_addr *saddr, *daddr;
        struct tcp_md5sig_pool *hp;
        struct hash_desc *desc;
-       struct tcphdr *th = tcp_hdr(skb);
+       const struct tcphdr *th = tcp_hdr(skb);
 
        if (sk) {
                saddr = &inet6_sk(sk)->saddr;
        return 1;
 }
 
-static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb)
+static int tcp_v6_inbound_md5_hash(struct sock *sk, const struct sk_buff *skb)
 {
        const __u8 *hash_location = NULL;
        struct tcp_md5sig_key *hash_expected;
        const struct ipv6hdr *ip6h = ipv6_hdr(skb);
-       struct tcphdr *th = tcp_hdr(skb);
+       const struct tcphdr *th = tcp_hdr(skb);
        int genhash;
        u8 newhash[16];