FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
bfd_udp.h
Go to the documentation of this file.
1 /* * Copyright (c) 2011-2016 Cisco and/or its affiliates.
2  * Licensed under the Apache License, Version 2.0 (the "License");
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at:
5  *
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14 /**
15  * @file
16  * @brief BFD UDP transport layer declarations
17  */
18 
19 #ifndef __included_bfd_udp_h__
20 #define __included_bfd_udp_h__
21 
22 #include <vppinfra/clib.h>
23 #include <vnet/adj/adj_types.h>
24 #include <vnet/ip/ip6_packet.h>
25 #include <vnet/bfd/bfd_api.h>
26 
27 /* *INDENT-OFF* */
28 /** identifier of BFD session based on UDP transport only */
29 typedef CLIB_PACKED (struct {
30  union {
31  /** interface to which the session is tied - single-hop */
33  /** the FIB index the peer is in - multi-hop*/
34  u32 fib_index;
35  };
36  /** local address */
37  ip46_address_t local_addr;
38  /** peer address */
39  ip46_address_t peer_addr;
40 }) bfd_udp_key_t;
41 /* *INDENT-ON* */
42 
43 /** UDP transport specific data embedded in bfd_session's union */
44 typedef struct
45 {
46  /** key identifying this session */
47  bfd_udp_key_t key;
48  /** adjacency index returned from adj lock call */
51 
52 /** bfd udp echo packet trace capture */
53 typedef struct
54 {
56  u8 data[400];
58 
59 struct bfd_session_s;
60 
61 /**
62  * @brief add the necessary transport layer by prepending it to existing data
63  *
64  *
65  * @param is_echo 1 if this is echo packet, 0 if control frame
66  *
67  * @return 1 on success, 0 on failure
68  */
70  const struct bfd_session_s *bs, int is_echo);
71 
72 /**
73  * @brief add the necessary transport layer by prepending it to existing data
74  *
75  * @param is_echo 1 if this is echo packet, 0 if control frame
76  *
77  * @return 1 on success, 0 on failure
78  */
80  const struct bfd_session_s *bs, int is_echo);
81 
82 /**
83  * @brief transport packet over udpv4
84  *
85  * @param is_echo 1 if this is echo packet, 0 if control frame
86  *
87  * @return 1 on success, 0 on failure
88  */
90  const struct bfd_session_s *bs);
91 
92 /**
93  * @brief transport packet over udpv6
94  *
95  * @param is_echo 1 if this is echo packet, 0 if control frame
96  *
97  * @return 1 on success, 0 on failure
98  */
100  const struct bfd_session_s *bs);
101 
102 /**
103  * @brief check if the bfd udp layer is echo-capable at this time
104  *
105  * @return 1 if available, 0 otherwise
106  */
108 
109 /**
110  * @brief get echo source information - used by CLI
111  */
112 void bfd_udp_get_echo_source (int *is_set, u32 * sw_if_index,
113  int *have_usable_ip4, ip4_address_t * ip4,
114  int *have_usable_ip6, ip6_address_t * ip6);
115 
116 #endif /* __included_bfd_udp_h__ */
117 
118 /*
119  * fd.io coding-style-patch-verification: ON
120  *
121  * Local Variables:
122  * eval: (c-set-style "gnu")
123  * End:
124  */
adj_types.h
bfd_session_s::transport
bfd_transport_e transport
transport type for this session
Definition: bfd_main.h:236
bfd_udp_is_echo_available
int bfd_udp_is_echo_available(bfd_transport_e transport)
check if the bfd udp layer is echo-capable at this time
Definition: bfd_udp.c:105
bfd_transport_udp6
int bfd_transport_udp6(vlib_main_t *vm, u32 bi, const struct bfd_session_s *bs)
transport packet over udpv6
Definition: bfd_udp.c:450
ip4
vl_api_ip4_address_t ip4
Definition: one.api:376
clib.h
bfd_transport_e
bfd_transport_e
Definition: bfd_api.h:30
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
bfd_udp_session_t
UDP transport specific data embedded in bfd_session's union.
Definition: bfd_udp.h:44
CLIB_PACKED
typedef CLIB_PACKED(struct { union { u32 sw_if_index;u32 fib_index;};ip46_address_t local_addr;ip46_address_t peer_addr;}) bfd_udp_key_t
identifier of BFD session based on UDP transport only
ip6_packet.h
bfd_add_udp6_transport
int bfd_add_udp6_transport(vlib_main_t *vm, u32 bi, const struct bfd_session_s *bs, int is_echo)
add the necessary transport layer by prepending it to existing data
bfd_session_s
Definition: bfd_main.h:85
ip4_address_t
Definition: ip4_packet.h:50
bfd_add_udp4_transport
int bfd_add_udp4_transport(vlib_main_t *vm, u32 bi, const struct bfd_session_s *bs, int is_echo)
add the necessary transport layer by prepending it to existing data
data
u8 data[128]
Definition: ipsec_types.api:92
bfd_udp_echo_input_trace_t
bfd udp echo packet trace capture
Definition: bfd_udp.h:53
bfd_udp_get_echo_source
void bfd_udp_get_echo_source(int *is_set, u32 *sw_if_index, int *have_usable_ip4, ip4_address_t *ip4, int *have_usable_ip6, ip6_address_t *ip6)
get echo source information - used by CLI
Definition: bfd_udp.c:235
u32
unsigned int u32
Definition: types.h:88
ip6
vl_api_ip6_address_t ip6
Definition: one.api:424
bfd_transport_udp4
int bfd_transport_udp4(vlib_main_t *vm, u32 bi, const struct bfd_session_s *bs)
transport packet over udpv4
Definition: bfd_udp.c:438
bfd_udp_session_t::key
bfd_udp_key_t key
key identifying this session
Definition: bfd_udp.h:47
adj_index_t
u32 adj_index_t
An index for adjacencies.
Definition: adj_types.h:30
vlib_main_t
Definition: main.h:102
u8
unsigned char u8
Definition: types.h:56
sw_if_index
vl_api_interface_index_t sw_if_index
Definition: wireguard.api:34
bfd_udp_echo_input_trace_t::len
u32 len
Definition: bfd_udp.h:55
bfd_api.h
BFD API declarations.
bfd_udp_session_t::adj_index
adj_index_t adj_index
adjacency index returned from adj lock call
Definition: bfd_udp.h:49