diff options
author | Neale Ranns <nranns@cisco.com> | 2017-04-21 01:07:59 -0700 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-04-26 15:31:41 +0000 |
commit | 227038a444b98f922b4a4f44b85ae60f9ee86e1c (patch) | |
tree | d4268410e3f860bb01386f4242e023324885801d /src/vnet/fib/fib_table.c | |
parent | 9806eae1f5f3953f7ac2c5bd07061a94387d757e (diff) |
IP Flow Hash Config fixes
- the flow hash config is (and was) cached on the load-balance object so the fib_table_t struct is not used a switch time. Therefore changes to the table's flow hash config need to be propagated to all load-balances and hance all FIB entries in the table.
- enable API for setting the IPv6 table flow hash config
- use only the hash config in the fib_table_t object and not on the ipX_fib_t
- add tests.
Change-Id: Ib804c11162c6d4972c764957562c372f663e05d4
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/fib/fib_table.c')
-rw-r--r-- | src/vnet/fib/fib_table.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/vnet/fib/fib_table.c b/src/vnet/fib/fib_table.c index ff428049b66..d50f17f1ce4 100644 --- a/src/vnet/fib/fib_table.c +++ b/src/vnet/fib/fib_table.c @@ -945,18 +945,52 @@ flow_hash_config_t fib_table_get_flow_hash_config (u32 fib_index, fib_protocol_t proto) { - switch (proto) - { - case FIB_PROTOCOL_IP4: - return (ip4_fib_table_get_flow_hash_config(fib_index)); - case FIB_PROTOCOL_IP6: - return (ip6_fib_table_get_flow_hash_config(fib_index)); - case FIB_PROTOCOL_MPLS: - return (mpls_fib_table_get_flow_hash_config(fib_index)); - } - return (0); + fib_table_t *fib; + + fib = fib_table_get(fib_index, proto); + + return (fib->ft_flow_hash_config); } +/** + * @brief Table set flow hash config context. + */ +typedef struct fib_table_set_flow_hash_config_ctx_t_ +{ + /** + * the flow hash config to set + */ + flow_hash_config_t hash_config; +} fib_table_set_flow_hash_config_ctx_t; + +static int +fib_table_set_flow_hash_config_cb (fib_node_index_t fib_entry_index, + void *arg) +{ + fib_table_set_flow_hash_config_ctx_t *ctx = arg; + + fib_entry_set_flow_hash_config(fib_entry_index, ctx->hash_config); + + return (1); +} + +void +fib_table_set_flow_hash_config (u32 fib_index, + fib_protocol_t proto, + flow_hash_config_t hash_config) +{ + fib_table_set_flow_hash_config_ctx_t ctx = { + .hash_config = hash_config, + }; + fib_table_t *fib; + + fib = fib_table_get(fib_index, proto); + fib->ft_flow_hash_config = hash_config; + + fib_table_walk(fib_index, proto, + fib_table_set_flow_hash_config_cb, + &ctx); +} u32 fib_table_get_table_id_for_sw_if_index (fib_protocol_t proto, |