net: Get skb hash over flow_keys structure
[cascardo/linux.git] / include / net / ip.h
index d14af7e..16cfc87 100644 (file)
@@ -31,7 +31,7 @@
 #include <net/route.h>
 #include <net/snmp.h>
 #include <net/flow.h>
-#include <net/flow_keys.h>
+#include <net/flow_dissector.h>
 
 struct sock;
 
@@ -45,6 +45,7 @@ struct inet_skb_parm {
 #define IPSKB_FRAG_COMPLETE    BIT(3)
 #define IPSKB_REROUTED         BIT(4)
 #define IPSKB_DOREDIRECT       BIT(5)
+#define IPSKB_FRAG_PMTU                BIT(6)
 
        u16                     frag_max_size;
 };
@@ -108,9 +109,8 @@ int ip_local_deliver(struct sk_buff *skb);
 int ip_mr_input(struct sk_buff *skb);
 int ip_output(struct sock *sk, struct sk_buff *skb);
 int ip_mc_output(struct sock *sk, struct sk_buff *skb);
-int ip_fragment(struct sock *sk, struct sk_buff *skb,
-               int (*output)(struct sock *, struct sk_buff *));
-int ip_do_nat(struct sk_buff *skb);
+int ip_do_fragment(struct sock *sk, struct sk_buff *skb,
+                  int (*output)(struct sock *, struct sk_buff *));
 void ip_send_check(struct iphdr *ip);
 int __ip_local_out(struct sk_buff *skb);
 int ip_local_out_sk(struct sock *sk, struct sk_buff *skb);
@@ -360,10 +360,12 @@ static inline void inet_set_txhash(struct sock *sk)
        struct inet_sock *inet = inet_sk(sk);
        struct flow_keys keys;
 
-       keys.src = inet->inet_saddr;
-       keys.dst = inet->inet_daddr;
-       keys.port16[0] = inet->inet_sport;
-       keys.port16[1] = inet->inet_dport;
+       memset(&keys, 0, sizeof(keys));
+
+       keys.addrs.src = inet->inet_saddr;
+       keys.addrs.dst = inet->inet_daddr;
+       keys.ports.src = inet->inet_sport;
+       keys.ports.dst = inet->inet_dport;
 
        sk->sk_txhash = flow_hash_from_keys(&keys);
 }
@@ -478,6 +480,16 @@ enum ip_defrag_users {
        IP_DEFRAG_MACVLAN,
 };
 
+/* Return true if the value of 'user' is between 'lower_bond'
+ * and 'upper_bond' inclusively.
+ */
+static inline bool ip_defrag_user_in_between(u32 user,
+                                            enum ip_defrag_users lower_bond,
+                                            enum ip_defrag_users upper_bond)
+{
+       return user >= lower_bond && user <= upper_bond;
+}
+
 int ip_defrag(struct sk_buff *skb, u32 user);
 #ifdef CONFIG_INET
 struct sk_buff *ip_check_defrag(struct sk_buff *skb, u32 user);