X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_flow_hash.h;h=bd37ef7307b6bca7e777932a76d9f06363045407;hb=3d5f08a82;hp=04777320f38a65828d38de4572388f9a1d84555f;hpb=e4031131ccddd7c4eb683b36f1a97a65dcff008a;p=vpp.git diff --git a/src/vnet/ip/ip_flow_hash.h b/src/vnet/ip/ip_flow_hash.h index 04777320f38..bd37ef7307b 100644 --- a/src/vnet/ip/ip_flow_hash.h +++ b/src/vnet/ip/ip_flow_hash.h @@ -16,31 +16,46 @@ #ifndef __IP_FLOW_HASH_H__ #define __IP_FLOW_HASH_H__ -/** Flow hash configuration */ -#define IP_FLOW_HASH_SRC_ADDR (1<<0) -#define IP_FLOW_HASH_DST_ADDR (1<<1) -#define IP_FLOW_HASH_PROTO (1<<2) -#define IP_FLOW_HASH_SRC_PORT (1<<3) -#define IP_FLOW_HASH_DST_PORT (1<<4) -#define IP_FLOW_HASH_REVERSE_SRC_DST (1<<5) -#define IP_FLOW_HASH_SYMMETRIC (1<<6) - -/** Default: 5-tuple without the "reverse" bit */ -#define IP_FLOW_HASH_DEFAULT (0x1F) - -#define foreach_flow_hash_bit \ -_(src, IP_FLOW_HASH_SRC_ADDR) \ -_(dst, IP_FLOW_HASH_DST_ADDR) \ -_(sport, IP_FLOW_HASH_SRC_PORT) \ -_(dport, IP_FLOW_HASH_DST_PORT) \ -_(proto, IP_FLOW_HASH_PROTO) \ -_(reverse, IP_FLOW_HASH_REVERSE_SRC_DST) \ -_(symmetric, IP_FLOW_HASH_SYMMETRIC) +#include + +/** Default: 5-tuple + flowlabel without the "reverse" bit */ +#define IP_FLOW_HASH_DEFAULT (0x9F) + +#define foreach_flow_hash_bit_v1 \ + _ (src, IP_FLOW_HASH_SRC_ADDR) \ + _ (dst, IP_FLOW_HASH_DST_ADDR) \ + _ (sport, IP_FLOW_HASH_SRC_PORT) \ + _ (dport, IP_FLOW_HASH_DST_PORT) \ + _ (proto, IP_FLOW_HASH_PROTO) \ + _ (reverse, IP_FLOW_HASH_REVERSE_SRC_DST) \ + _ (symmetric, IP_FLOW_HASH_SYMMETRIC) + +#define foreach_flow_hash_bit \ + _ (src, 0, IP_FLOW_HASH_SRC_ADDR) \ + _ (dst, 1, IP_FLOW_HASH_DST_ADDR) \ + _ (sport, 2, IP_FLOW_HASH_SRC_PORT) \ + _ (dport, 3, IP_FLOW_HASH_DST_PORT) \ + _ (proto, 4, IP_FLOW_HASH_PROTO) \ + _ (reverse, 5, IP_FLOW_HASH_REVERSE_SRC_DST) \ + _ (symmetric, 6, IP_FLOW_HASH_SYMMETRIC) \ + _ (flowlabel, 7, IP_FLOW_HASH_FL) /** * A flow hash configuration is a mask of the flow hash options */ -typedef u32 flow_hash_config_t; +typedef enum flow_hash_config_t_ +{ +#define _(a, b, c) c = (1 << b), + foreach_flow_hash_bit +#undef _ +} flow_hash_config_t; + +/* Router ID mixed into the flow hash to prevent network polarisation */ +extern u32 ip_flow_hash_router_id; + +int ip_flow_hash_set (ip_address_family_t af, u32 table_id, + flow_hash_config_t flow_hash_config); +void ip_flow_hash_router_id_set (u32 router_id); #endif /* __IP_TYPES_H__ */