blob: e21c884c4019283376924d241d5b4af190028ddb [file] [log] [blame]
Ed Warnickecb9cada2015-12-08 15:45:58 -07001/*
2 * Copyright (c) 2015 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#ifndef __included_l2_xcrw_h__
16#define __included_l2_xcrw_h__
17
18#include <vlib/vlib.h>
19#include <vnet/vnet.h>
20#include <vnet/pg/pg.h>
21#include <vppinfra/error.h>
22#include <vnet/ip/ip.h>
23#include <vnet/l2/l2_input.h>
24#include <vnet/l2/l2_output.h>
25#include <vnet/api_errno.h>
26#include <vnet/ethernet/ethernet.h>
27
Dave Barach97d8dc22016-08-15 15:31:15 -040028typedef struct
29{
30 /*
Ed Warnickecb9cada2015-12-08 15:45:58 -070031 * Let: rewrite_header.sw_if_index = tx_fib_index or ~0.
32 * rewrite_header.next_index = L2_XCRW_NEXT_XXX
33 */
34 vnet_declare_rewrite (VLIB_BUFFER_PRE_DATA_SIZE);
35} l2_xcrw_adjacency_t;
36
Dave Barach97d8dc22016-08-15 15:31:15 -040037typedef struct
38{
Ed Warnickecb9cada2015-12-08 15:45:58 -070039 /* L2 interface */
40 u32 l2_sw_if_index;
41
42 /* Tunnel interface */
Dave Barach97d8dc22016-08-15 15:31:15 -040043 u32 tunnel_sw_if_index; /* This field remains set in freed pool elts */
Ed Warnickecb9cada2015-12-08 15:45:58 -070044
45} l2_xcrw_tunnel_t;
46
Dave Barach97d8dc22016-08-15 15:31:15 -040047typedef struct
48{
Ed Warnickecb9cada2015-12-08 15:45:58 -070049 u32 cached_next_index;
50
51 /* Vector of cross-connect rewrites */
Dave Barach97d8dc22016-08-15 15:31:15 -040052 l2_xcrw_adjacency_t *adj_by_sw_if_index;
Ed Warnickecb9cada2015-12-08 15:45:58 -070053
54 /* Pool of xcrw tunnels */
Dave Barach97d8dc22016-08-15 15:31:15 -040055 l2_xcrw_tunnel_t *tunnels;
Ed Warnickecb9cada2015-12-08 15:45:58 -070056
57 /* Tunnel index by tunnel sw_if_index */
Dave Barach97d8dc22016-08-15 15:31:15 -040058 uword *tunnel_index_by_l2_sw_if_index;
Ed Warnickecb9cada2015-12-08 15:45:58 -070059
60 /* convenience variables */
Dave Barach97d8dc22016-08-15 15:31:15 -040061 vlib_main_t *vlib_main;
62 vnet_main_t *vnet_main;
Ed Warnickecb9cada2015-12-08 15:45:58 -070063} l2_xcrw_main_t;
64
Dave Barach97d8dc22016-08-15 15:31:15 -040065typedef enum
66{
Ed Warnickecb9cada2015-12-08 15:45:58 -070067 L2_XCRW_NEXT_DROP,
68 L2_XCRW_N_NEXT,
69} l2_xcrw_next_t;
70
71#define foreach_l2_xcrw_error \
72_(DROP, "Packets dropped") \
73_(FWD, "Packets forwarded")
74
Dave Barach97d8dc22016-08-15 15:31:15 -040075typedef enum
76{
Ed Warnickecb9cada2015-12-08 15:45:58 -070077#define _(sym,str) L2_XCRW_ERROR_##sym,
78 foreach_l2_xcrw_error
79#undef _
Dave Barach97d8dc22016-08-15 15:31:15 -040080 L2_XCRW_N_ERROR,
Ed Warnickecb9cada2015-12-08 15:45:58 -070081} l2_xcrw_error_t;
82
Filip Tehlar44f0f712019-03-11 04:26:37 -070083extern vlib_node_registration_t l2_xcrw_node;
84
Ed Warnickecb9cada2015-12-08 15:45:58 -070085#endif /* __included_l2_xcrw_h__ */
Dave Barach97d8dc22016-08-15 15:31:15 -040086
87/*
88 * fd.io coding-style-patch-verification: ON
89 *
90 * Local Variables:
91 * eval: (c-set-style "gnu")
92 * End:
93 */