FD.io VPP  v19.04.2-12-g66b1689
Vector Packet Processing
bier_disp_table.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 #ifndef __BIER_DISP_TABLE_H__
17 #define __BIER_DISP_TABLE_H__
18 
19 #include <vnet/ip/ip.h>
20 #include <vnet/adj/adj.h>
21 #include <vnet/dpo/replicate_dpo.h>
22 
23 #include <vnet/bier/bier_types.h>
25 
26 /**
27  * @brief
28  * A protocol Independent IP multicast FIB table
29  */
30 typedef struct bier_disp_table_t_
31 {
32  /**
33  * Required for pool_get_aligned
34  */
35  CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
36 
37  /**
38  * number of locks on the table
39  */
41 
42  /**
43  * Table ID (hash key) for this FIB.
44  */
46 
47  /**
48  * The lookup DB based on sender BP. Value is the index of the
49  * BIER disp object.
50  */
53 
54 /**
55  * @brief
56  * Format the description/name of the table
57  */
58 extern u8* format_bier_disp_table(u8* s, va_list *ap);
59 
60 extern void bier_disp_table_entry_path_add(u32 table_id,
61  bier_bp_t src,
62  bier_hdr_proto_id_t payload_proto,
63  const fib_route_path_t *rpath);
64 
65 extern void bier_disp_table_entry_path_remove(u32 table_id,
66  bier_bp_t src,
67  bier_hdr_proto_id_t payload_proto,
68  const fib_route_path_t *paths);
69 
70 extern index_t bier_disp_table_find(u32 table_id);
71 
72 
73 extern index_t bier_disp_table_add_or_lock(u32 table_id);
74 extern void bier_disp_table_unlock_w_table_id(u32 table_id);
75 
76 extern void bier_disp_table_unlock(index_t bdti);
77 extern void bier_disp_table_lock(index_t bdti);
79  dpo_id_t *dpo);
80 
81 /**
82  * Types and functions to walk all the entries in one BIER Table
83  */
84 typedef void (*bier_disp_table_walk_fn_t)(const bier_disp_table_t *bdt,
85  const bier_disp_entry_t *bde,
86  u16 bp,
87  void *ctx);
88 extern void bier_disp_table_walk(u32 table_id,
90  void *ctx);
91 
92 /**
93  * @brief
94  * Get a pointer to a FIB table
95  */
97 
98 static inline bier_disp_table_t *
100 {
101  return (pool_elt_at_index(bier_disp_table_pool, bdti));
102 }
103 
104 static inline index_t
107 {
108  bier_disp_table_t *bdt;
109 
110  bdt = bier_disp_table_get(bdti);
111 
112  return (bdt->bdt_db[src]);
113 }
114 
115 #endif
u8 * format_bier_disp_table(u8 *s, va_list *ap)
Format the description/name of the table.
struct bier_disp_table_t_ bier_disp_table_t
A protocol Independent IP multicast FIB table.
A representation of a path as described by a route producer.
Definition: fib_types.h:470
index_t bdt_db[BIER_BP_MAX]
The lookup DB based on sender BP.
bier_disp_table_t * bier_disp_table_pool
Get a pointer to a FIB table.
void bier_disp_table_unlock(index_t bdti)
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
index_t bier_disp_table_add_or_lock(u32 table_id)
bier_disposition : The BIER disposition object
unsigned char u8
Definition: types.h:56
void bier_disp_table_entry_path_remove(u32 table_id, bier_bp_t src, bier_hdr_proto_id_t payload_proto, const fib_route_path_t *paths)
void bier_disp_table_contribute_forwarding(index_t bdti, dpo_id_t *dpo)
unsigned int u32
Definition: types.h:88
u16 bdt_locks
number of locks on the table
u32 bier_bp_t
A bit positon as assigned to egress PEs.
Definition: bier_types.h:294
void bier_disp_table_unlock_w_table_id(u32 table_id)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
Definition: dpo.h:168
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition: pool.h:514
long ctx[MAX_CONNS]
Definition: main.c:144
unsigned short u16
Definition: types.h:57
u16 bier_hdr_src_id_t
An identifier of the sender of BIER packets this is the source of the &#39;tree&#39; - the BFIR...
Definition: bier_types.h:307
index_t bier_disp_table_find(u32 table_id)
vl_api_ip4_address_t src
Definition: ipsec_gre.api:38
enum bier_hdr_proto_id_t_ bier_hdr_proto_id_t
BIER header protocol payload types.
void bier_disp_table_entry_path_add(u32 table_id, bier_bp_t src, bier_hdr_proto_id_t payload_proto, const fib_route_path_t *rpath)
static index_t bier_disp_table_lookup(index_t bdti, bier_hdr_src_id_t src)
void(* bier_disp_table_walk_fn_t)(const bier_disp_table_t *bdt, const bier_disp_entry_t *bde, u16 bp, void *ctx)
Types and functions to walk all the entries in one BIER Table.
CLIB_CACHE_LINE_ALIGN_MARK(cacheline0)
Required for pool_get_aligned.
#define BIER_BP_MAX
The maximum BP that can be assigned.
Definition: bier_types.h:301
A protocol Independent IP multicast FIB table.
void bier_disp_table_walk(u32 table_id, bier_disp_table_walk_fn_t fn, void *ctx)
static bier_disp_table_t * bier_disp_table_get(index_t bdti)
void bier_disp_table_lock(index_t bdti)
u32 bdt_table_id
Table ID (hash key) for this FIB.