mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 16:41:25 +00:00
net: Get skb hash over flow_keys structure
This patch changes flow hashing to use jhash2 over the flow_keys structure instead just doing jhash_3words over src, dst, and ports. This method will allow us take more input into the hashing function so that we can include full IPv6 addresses, VLAN, flow labels etc. without needing to resort to xor'ing which makes for a poor hash. Acked-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c468efe2c7
commit
42aecaa9bb
6 changed files with 66 additions and 17 deletions
|
@ -6,6 +6,15 @@
|
|||
#include <linux/in6.h>
|
||||
#include <uapi/linux/if_ether.h>
|
||||
|
||||
/**
|
||||
* struct flow_dissector_key_control:
|
||||
* @thoff: Transport header offset
|
||||
*/
|
||||
struct flow_dissector_key_control {
|
||||
u16 thoff;
|
||||
u16 padding;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct flow_dissector_key_basic:
|
||||
* @thoff: Transport header offset
|
||||
|
@ -13,9 +22,9 @@
|
|||
* @ip_proto: Transport header protocol (eg. TCP/UDP)
|
||||
*/
|
||||
struct flow_dissector_key_basic {
|
||||
u16 thoff;
|
||||
__be16 n_proto;
|
||||
u8 ip_proto;
|
||||
u8 padding;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -70,6 +79,7 @@ struct flow_dissector_key_eth_addrs {
|
|||
};
|
||||
|
||||
enum flow_dissector_key_id {
|
||||
FLOW_DISSECTOR_KEY_CONTROL, /* struct flow_dissector_key_control */
|
||||
FLOW_DISSECTOR_KEY_BASIC, /* struct flow_dissector_key_basic */
|
||||
FLOW_DISSECTOR_KEY_IPV4_ADDRS, /* struct flow_dissector_key_addrs */
|
||||
FLOW_DISSECTOR_KEY_IPV6_HASH_ADDRS, /* struct flow_dissector_key_addrs */
|
||||
|
@ -109,11 +119,16 @@ static inline bool skb_flow_dissect(const struct sk_buff *skb,
|
|||
}
|
||||
|
||||
struct flow_keys {
|
||||
struct flow_dissector_key_addrs addrs;
|
||||
struct flow_dissector_key_ports ports;
|
||||
struct flow_dissector_key_control control;
|
||||
#define FLOW_KEYS_HASH_START_FIELD basic
|
||||
struct flow_dissector_key_basic basic;
|
||||
struct flow_dissector_key_ports ports;
|
||||
struct flow_dissector_key_addrs addrs;
|
||||
};
|
||||
|
||||
#define FLOW_KEYS_HASH_OFFSET \
|
||||
offsetof(struct flow_keys, FLOW_KEYS_HASH_START_FIELD)
|
||||
|
||||
extern struct flow_dissector flow_keys_dissector;
|
||||
extern struct flow_dissector flow_keys_buf_dissector;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue