FD.io VPP  v18.01.2-1-g9b554f3
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  * number of locks on the table
34  */
36 
37  /**
38  * Table ID (hash key) for this FIB.
39  */
41 
42  /**
43  * The lookup DB based on sender BP. Value is the index of the
44  * BIER disp object.
45  */
48 
49 /**
50  * @brief
51  * Format the description/name of the table
52  */
53 extern u8* format_bier_disp_table(u8* s, va_list *ap);
54 
55 extern void bier_disp_table_entry_path_add(u32 table_id,
56  bier_bp_t src,
57  bier_hdr_proto_id_t payload_proto,
58  const fib_route_path_t *rpath);
59 
60 extern void bier_disp_table_entry_path_remove(u32 table_id,
61  bier_bp_t src,
62  bier_hdr_proto_id_t payload_proto,
63  const fib_route_path_t *paths);
64 
65 extern index_t bier_disp_table_find(u32 table_id);
66 
67 
68 extern index_t bier_disp_table_add_or_lock(u32 table_id);
69 extern void bier_disp_table_unlock_w_table_id(u32 table_id);
70 
71 extern void bier_disp_table_unlock(index_t bdti);
72 extern void bier_disp_table_lock(index_t bdti);
74  dpo_id_t *dpo);
75 
76 /**
77  * Types and functions to walk all the entries in one BIER Table
78  */
79 typedef void (*bier_disp_table_walk_fn_t)(const bier_disp_table_t *bdt,
80  const bier_disp_entry_t *bde,
81  u16 bp,
82  void *ctx);
83 extern void bier_disp_table_walk(u32 table_id,
85  void *ctx);
86 
87 /**
88  * @brief
89  * Get a pointer to a FIB table
90  */
92 
93 static inline bier_disp_table_t *
95 {
96  return (pool_elt_at_index(bier_disp_table_pool, bdti));
97 }
98 
99 static inline index_t
101  bier_hdr_src_id_t src)
102 {
103  bier_disp_table_t *bdt;
104 
105  bdt = bier_disp_table_get(bdti);
106 
107  return (bdt->bdt_db[src]);
108 }
109 
110 #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:377
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_dispositon : The BIER dispositon object
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)
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:346
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:166
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition: pool.h:459
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:359
index_t bier_disp_table_find(u32 table_id)
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)
unsigned int u32
Definition: types.h:88
long ctx[MAX_CONNS]
Definition: main.c:122
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.
#define BIER_BP_MAX
The maximum BP that can be assigned.
Definition: bier_types.h:353
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
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.