FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
gbp_policy_dpo.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 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 __GBP_POLICY_DPO_H__
17 #define __GBP_POLICY_DPO_H__
18 
19 #include <vnet/dpo/dpo.h>
20 #include <vnet/dpo/load_balance.h>
21 #include <vnet/fib/ip4_fib.h>
22 #include <vnet/fib/ip6_fib.h>
23 
24 /**
25  * @brief
26  * The GBP FWD DPO. Used in the L3 path to select the correct EPG uplink
27  * based on the source EPG.
28  */
29 typedef struct gbp_policy_dpo_t_
30 {
31  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
32 
33  /**
34  * The protocol of packets using this DPO
35  */
37 
38  /**
39  * SClass
40  */
42 
43  /**
44  * sclass scope
45  */
47 
48  /**
49  * output sw_if_index
50  */
52 
53  /**
54  * number of locks.
55  */
57 
58  /**
59  * Stacked DPO on DVR/ADJ of output interface
60  */
63 
64 extern void gbp_policy_dpo_add_or_lock (dpo_proto_t dproto,
67  u32 sw_if_index, dpo_id_t * dpo);
68 
70 
74 
75 /**
76  * Types exposed for the Data-plane
77  */
80 
83 {
85 }
86 
88 gbp_classify_get_gpd (const ip4_address_t * ip4, const ip6_address_t * ip6,
89  const u32 fib_index)
90 {
91  const gbp_policy_dpo_t *gpd;
92  const dpo_id_t *dpo;
93  const load_balance_t *lb;
94  u32 lbi;
95 
96  if (ip4)
97  lbi = ip4_fib_forwarding_lookup (fib_index, ip4);
98  else if (ip6)
99  lbi = ip6_fib_table_fwding_lookup (fib_index, ip6);
100  else
101  return 0;
102 
103  lb = load_balance_get (lbi);
104  dpo = load_balance_get_bucket_i (lb, 0);
105 
106  if (dpo->dpoi_type != gbp_policy_dpo_type)
107  return 0;
108 
109  gpd = gbp_policy_dpo_get (dpo->dpoi_index);
110  return gpd;
111 }
112 
113 /*
114  * fd.io coding-style-patch-verification: ON
115  *
116  * Local Variables:
117  * eval: (c-set-style "gnu")
118  * End:
119  */
120 
121 #endif
load_balance.h
dpo_id_t_::dpoi_index
index_t dpoi_index
the index of objects of that type
Definition: dpo.h:190
gbp_policy_dpo_t
struct gbp_policy_dpo_t_ gbp_policy_dpo_t
The GBP FWD DPO.
ip4
vl_api_ip4_address_t ip4
Definition: one.api:376
dpo_proto_t
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
dpo_id_t_::dpoi_type
dpo_type_t dpoi_type
the type
Definition: dpo.h:178
gbp_policy_dpo_pool
gbp_policy_dpo_t * gbp_policy_dpo_pool
DPO pool.
Definition: gbp_policy_dpo.c:31
pool_elt_at_index
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition: pool.h:553
u16
unsigned short u16
Definition: types.h:57
gbp_policy_dpo_add_or_lock
void gbp_policy_dpo_add_or_lock(dpo_proto_t dproto, gbp_scope_t scope, sclass_t sclass, u32 sw_if_index, dpo_id_t *dpo)
Definition: gbp_policy_dpo.c:97
gbp_policy_dpo_get_type
dpo_type_t gbp_policy_dpo_get_type(void)
Definition: gbp_policy_dpo.c:208
dpo.h
gbp_policy_dpo_t_::gpd_sclass
sclass_t gpd_sclass
SClass.
Definition: gbp_policy_dpo.h:41
gbp_policy_dpo_t_
The GBP FWD DPO.
Definition: gbp_policy_dpo.h:29
gbp_policy_dpo_t_::gpd_sw_if_index
u32 gpd_sw_if_index
output sw_if_index
Definition: gbp_policy_dpo.h:51
index_t
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:43
static_always_inline
#define static_always_inline
Definition: clib.h:112
dpo_type_t
enum dpo_type_t_ dpo_type_t
Common types of data-path objects New types can be dynamically added using dpo_register_new_type()
ip4_gbp_policy_dpo_node
vlib_node_registration_t ip4_gbp_policy_dpo_node
(constructor) VLIB_REGISTER_NODE (ip4_gbp_policy_dpo_node)
Definition: gbp_policy_dpo.c:384
load_balance_get_bucket_i
static const dpo_id_t * load_balance_get_bucket_i(const load_balance_t *lb, u32 bucket)
Definition: load_balance.h:229
scope
vl_api_gbp_scope_t scope
Definition: gbp.api:78
sclass
u16 sclass
Definition: gbp.api:131
ip4_address_t
Definition: ip4_packet.h:50
vlib_node_registration_t
struct _vlib_node_registration vlib_node_registration_t
ip6_fib_table_fwding_lookup
static u32 ip6_fib_table_fwding_lookup(u32 fib_index, const ip6_address_t *dst)
Definition: ip6_fib.h:115
ip6_gbp_policy_dpo_node
vlib_node_registration_t ip6_gbp_policy_dpo_node
(constructor) VLIB_REGISTER_NODE (ip6_gbp_policy_dpo_node)
Definition: gbp_policy_dpo.c:398
gbp_policy_dpo_t_::CLIB_CACHE_LINE_ALIGN_MARK
CLIB_CACHE_LINE_ALIGN_MARK(cacheline0)
index
u32 index
Definition: flow_types.api:221
always_inline
#define always_inline
Definition: rdma_mlx5dv.h:23
sclass_t
u16 sclass_t
Definition: gbp_types.h:25
gbp_policy_dpo_t_::gpd_proto
dpo_proto_t gpd_proto
The protocol of packets using this DPO.
Definition: gbp_policy_dpo.h:36
u32
unsigned int u32
Definition: types.h:88
ip6
vl_api_ip6_address_t ip6
Definition: one.api:424
gbp_policy_dpo_t_::gpd_scope
gbp_scope_t gpd_scope
sclass scope
Definition: gbp_policy_dpo.h:46
load_balance_get
static load_balance_t * load_balance_get(index_t lbi)
Definition: load_balance.h:220
ip4_fib.h
ip6_fib.h
gbp_policy_dpo_get
static gbp_policy_dpo_t * gbp_policy_dpo_get(index_t index)
Definition: gbp_policy_dpo.h:82
gbp_classify_get_gpd
const static_always_inline gbp_policy_dpo_t * gbp_classify_get_gpd(const ip4_address_t *ip4, const ip6_address_t *ip6, const u32 fib_index)
Definition: gbp_policy_dpo.h:88
dpo_id_t_
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
Definition: dpo.h:172
gbp_policy_dpo_type
dpo_type_t gbp_policy_dpo_type
Types exposed for the Data-plane.
Definition: gbp_policy_dpo.c:36
ip4_fib_forwarding_lookup
static index_t ip4_fib_forwarding_lookup(u32 fib_index, const ip4_address_t *addr)
Definition: ip4_fib.h:160
gbp_policy_dpo_t_::gpd_dpo
dpo_id_t gpd_dpo
Stacked DPO on DVR/ADJ of output interface.
Definition: gbp_policy_dpo.h:61
load_balance_t_
The FIB DPO provieds;.
Definition: load_balance.h:106
sw_if_index
vl_api_interface_index_t sw_if_index
Definition: wireguard.api:34
gbp_policy_port_node
vlib_node_registration_t gbp_policy_port_node
(constructor) VLIB_REGISTER_NODE (gbp_policy_port_node)
Definition: gbp_policy_node.c:288
gbp_policy_dpo_t_::gpd_locks
u16 gpd_locks
number of locks.
Definition: gbp_policy_dpo.h:56
gbp_scope_t
u16 gbp_scope_t
Definition: gbp_types.h:24