blob: f79236711eab8737ee0ff1f31c3a97c289ec30e8 [file] [log] [blame]
Neale Ranns5e575b12016-10-03 09:40:25 +01001/*
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 * @file
17 * @brief LISP-GPE definitions.
18 */
19
20#ifndef __LISP_GPE_FWD_ENTRY_H__
21#define __LISP_GPE_FWD_ENTRY_H__
22
23#include <vnet/lisp-gpe/lisp_gpe.h>
24
25/**
26 * @brief A path on which to forward lisp traffic
27 */
28typedef struct lisp_fwd_path_t_
29{
30 /**
31 * The adjacency constructed for the locator pair
32 */
33 index_t lisp_adj;
34
35 /**
36 * Priority. Only the paths with the best priority will be installed in FIB
37 */
38 u8 priority;
39
40 /**
41 * [UE]CMP weigt for the path
42 */
43 u8 weight;
44
45} lisp_fwd_path_t;
46
47/**
48 * @brief A Forwarding entry can be 'normal' or 'negative'
49 * Negative implies we deliberately want to add a FIB entry for an EID
50 * that results in 'special' behaviour determined by an 'action'.
51 * @normal means send it down some tunnels.
52 */
53typedef enum lisp_gpe_fwd_entry_type_t_
54{
55 LISP_GPE_FWD_ENTRY_TYPE_NORMAL,
56 LISP_GPE_FWD_ENTRY_TYPE_NEGATIVE,
57} lisp_gpe_fwd_entry_type_t;
58
59
60/**
61 * LISP-GPE fwd entry key
62 */
63typedef struct lisp_gpe_fwd_entry_key_t_
64{
65 dp_address_t rmt;
66 dp_address_t lcl;
67 u32 vni;
68} lisp_gpe_fwd_entry_key_t;
69
70/**
71 * @brief A LISP Forwarding Entry
72 *
73 * A forwarding entry is from a locai EID to a remote EID over a set of rloc pairs
74 */
75typedef struct lisp_gpe_fwd_entry_t_
76{
77 /**
78 * This object joins the FIB control plane graph to receive updates to
79 * for changes to the graph.
80 */
81 fib_node_t node;
82
83 /**
84 * The Entry's key: {lEID,r-EID,vni}
85 */
86 lisp_gpe_fwd_entry_key_t *key;
87
88 /**
89 * The forwarding entry type
90 */
91 lisp_gpe_fwd_entry_type_t type;
92
93 /**
94 * The tenant the entry belongs to
95 */
96 u32 tenant;
97
98 /**
99 * The VRF (in the case of L3) or Bridge-Domain (for L2) index
100 */
101 union
102 {
103 /**
104 * Fields relevant to an L2 entry
105 */
106 struct
107 {
108 /**
109 * The VRF ID
110 */
111 u32 eid_table_id;
112
113 /**
114 * The FIB index for the overlay, i.e. the FIB in which the EIDs
115 * are present
116 */
117 u32 eid_fib_index;
118 /**
119 * The SRC-FIB index for created for anding source-route entries
120 */
121 u32 src_fib_index;
122 };
123 /**
124 * Fields relevant to an L2 entry
125 */
126 struct
127 {
128 /**
129 * The Bridge-Domain (for L2) index
130 */
131 u32 eid_bd_id;
132
133 /**
134 * The Bridge-domain index for the overlay EIDs
135 */
136 u32 eid_bd_index;
137
138 /**
139 * The path-list created for the forwarding
140 */
141 fib_node_index_t path_list_index;
142
143 /**
144 * Child index of this entry on the path-list
145 */
146 u32 child_index;
147
148 /**
149 * The DPO used to forward
150 */
151 dpo_id_t dpo;
152 } l2;
153 };
154
155 union
156 {
157 /**
158 * @brief When the type is 'normal'
159 * The RLOC pair that form the route's paths. i.e. where to send
160 * packets for this route.
161 */
162 lisp_fwd_path_t *paths;
163
164 /**
165 * @brief When the type is negative. The action to take.
166 */
167 negative_fwd_actions_e action;
168 };
169} lisp_gpe_fwd_entry_t;
170
171extern int
172vnet_lisp_gpe_add_del_fwd_entry (vnet_lisp_gpe_add_del_fwd_entry_args_t * a,
173 u32 * hw_if_indexp);
174
175extern void vnet_lisp_gpe_fwd_entry_flush (void);
176
177extern u32 lisp_l2_fib_lookup (lisp_gpe_main_t * lgm,
178 u16 bd_index, u8 src_mac[8], u8 dst_mac[8]);
179
180#endif
181
182/*
183 * fd.io coding-style-patch-verification: ON
184 *
185 * Local Variables:
186 * eval: (c-set-style "gnu")
187 * End:
188 */