FD.io VPP  v17.04-9-g99c0734
Vector Packet Processing
load_balance_map.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 /**
16  * @brief
17  */
18 
19 #ifndef __LOAD_BALANCE_MAP_H__
20 #define __LOAD_BALANCE_MAP_H__
21 
22 #include <vlib/vlib.h>
23 #include <vnet/fib/fib_types.h>
24 #include <vnet/dpo/load_balance.h>
25 
27 
28 /**
29  */
30 typedef struct load_balance_map_t_ {
31  /**
32  * The buckets of the map that provide the index to index translation.
33  * In the first cacheline.
34  */
36 
37  /**
38  * the vector of paths this MAP represents
39  */
41 
42  /**
43  * the sum of the normalised weights. cache for convenience
44  */
46 
47  /**
48  * Number of locks. Maps are shared by a large number of recrusvie fib_entry_ts
49  */
52 
54  u32 sum_of_weights,
55  const load_balance_path_t *norm_paths);
56 
57 extern void load_balance_map_lock(index_t lmbi);
58 extern void load_balance_map_unlock(index_t lbmi);
59 
61 
62 extern u8* format_load_balance_map(u8 *s, va_list ap);
63 extern void load_balance_map_show_mem(void);
64 
65 /**
66  * The encapsulation breakages are for fast DP access
67  */
69 
70 static inline load_balance_map_t*
72 {
73  return (pool_elt_at_index(load_balance_map_pool, lbmi));
74 }
75 
76 
77 extern void load_balance_map_module_init(void);
78 
79 #endif
struct load_balance_map_path_t_ * lbm_paths
the vector of paths this MAP represents
void load_balance_map_module_init(void)
Make/add a new or lock an existing Load-balance map.
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
Definition: dpo.h:41
static load_balance_map_t * load_balance_map_get(index_t lbmi)
void load_balance_map_unlock(index_t lbmi)
load_balance_map_t * load_balance_map_pool
The encapsulation breakages are for fast DP access.
u32 lbm_sum_of_norm_weights
the sum of the normalised weights.
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition: pool.h:397
struct load_balance_map_t_ load_balance_map_t
void load_balance_map_show_mem(void)
u32 fib_node_index_t
A typedef of a node index.
Definition: fib_types.h:28
unsigned int u32
Definition: types.h:88
u16 * lbm_buckets
The buckets of the map that provide the index to index translation.
u8 * format_load_balance_map(u8 *s, va_list ap)
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
index_t load_balance_map_add_or_lock(u32 n_buckets, u32 sum_of_weights, const load_balance_path_t *norm_paths)
One path from an [EU]CMP set that the client wants to add to a load-balance object.
Definition: load_balance.h:62
void load_balance_map_path_state_change(fib_node_index_t path_index)
the state of a path has changed (it has no doubt gone down).
u32 lbm_locks
Number of locks.
void load_balance_map_lock(index_t lmbi)