FD.io VPP  v18.01-8-g0eacf49
Vector Packet Processing
bier_imp.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  * bier_imposition : The BIER imposition object
17  *
18  * A BIER imposition object is present in the IP mcast output list
19  * and represents the imposition of a BIER bitmask. After BIER header
20  * imposition the packet is forward within the appropriate/specifid
21  * BIER table
22  */
23 
24 #ifndef __BIER_IMPOSITION_H__
25 #define __BIER_IMPOSITION_H__
26 
27 #include <vnet/bier/bier_types.h>
28 #include <vnet/fib/fib_types.h>
29 #include <vnet/dpo/dpo.h>
30 
31 /**
32  * The BIER imposition object
33  */
34 typedef struct bier_imp_t_ {
35  /**
36  * The BIER table into which to forward the post imposed packet
37  */
39 
40  /**
41  * number of locks
42  */
44 
45  /**
46  * The DPO contirubted from the resolving BIER table.
47  * One per-IP protocol. This allows us to share a BIER imposition
48  * object for a IPv4 and IPv6 mfib path.
49  */
51 
52  /**
53  * The Header to impose.
54  */
56 
57  /**
58  * The bit string.
59  * This is a memory v. speed tradeoff. We inline here the
60  * largest header type so as the bitstring is on the same
61  * cacheline as the header.
62  */
64 } bier_imp_t;
65 
67  bier_bp_t sender,
68  const bier_bit_string_t *bs);
69 
70 extern void bier_imp_unlock(index_t bii);
71 extern void bier_imp_lock(index_t bii);
72 
73 extern u8* format_bier_imp(u8* s, va_list *ap);
74 
76  dpo_proto_t proto,
77  dpo_id_t *dpo);
78 
80 
83 {
84  return (pool_elt_at_index(bier_imp_pool, bii));
85 }
86 
87 #endif
u32 bi_locks
number of locks
Definition: bier_imp.h:43
#define FIB_PROTOCOL_IP_MAX
Definition outside of enum so it does not need to be included in non-defaulted switch statements...
Definition: fib_types.h:57
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
bier_imp_t * bier_imp_pool
bier_imposition : The BIER imposition object
Definition: bier_imp.c:33
bier_bit_mask_4096_t bi_bits
The bit string.
Definition: bier_imp.h:63
The ID of a table.
Definition: bier_types.h:446
A BIER Bit-String value of length 4096 bits.
Definition: bier_types.h:299
A Variable length BitString.
Definition: bier_types.h:323
void bier_imp_contribute_forwarding(index_t bii, dpo_proto_t proto, dpo_id_t *dpo)
Definition: bier_imp.c:174
bier_imposition : The BIER imposition object
Definition: bier_imp.h:34
#define always_inline
Definition: clib.h:92
static bier_imp_t * bier_imp_get(index_t bii)
Definition: bier_imp.h:82
bier_hdr_t bi_hdr
The Header to impose.
Definition: bier_imp.h:55
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
u32 bier_bp_t
A bit positon as assigned to egress PEs.
Definition: bier_types.h:346
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
struct bier_imp_t_ bier_imp_t
bier_imposition : The BIER imposition object
u8 * format_bier_imp(u8 *s, va_list *ap)
Definition: bier_imp.c:137
void bier_imp_lock(index_t bii)
Definition: bier_imp.c:48
unsigned int u32
Definition: types.h:88
void bier_imp_unlock(index_t bii)
Definition: bier_imp.c:110
A BIER header of variable length The encoding follows: https://tools.ietf.org/html/draft-ietf-bier-mp...
Definition: bier_types.h:373
unsigned char u8
Definition: types.h:56
bier_table_id_t bi_tbl
The BIER table into which to forward the post imposed packet.
Definition: bier_imp.h:38
dpo_id_t bi_dpo[FIB_PROTOCOL_IP_MAX]
The DPO contirubted from the resolving BIER table.
Definition: bier_imp.h:50
index_t bier_imp_add_or_lock(const bier_table_id_t *bt, bier_bp_t sender, const bier_bit_string_t *bs)
Definition: bier_imp.c:60