FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
hdlc.h
Go to the documentation of this file.
1
/*
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
/*
16
* hdlc.h: types/functions for hdlc.
17
*
18
* Copyright (c) 2008 Eliot Dresselhaus
19
*
20
* Permission is hereby granted, free of charge, to any person obtaining
21
* a copy of this software and associated documentation files (the
22
* "Software"), to deal in the Software without restriction, including
23
* without limitation the rights to use, copy, modify, merge, publish,
24
* distribute, sublicense, and/or sell copies of the Software, and to
25
* permit persons to whom the Software is furnished to do so, subject to
26
* the following conditions:
27
*
28
* The above copyright notice and this permission notice shall be
29
* included in all copies or substantial portions of the Software.
30
*
31
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
#ifndef included_hdlc_h
41
#define included_hdlc_h
42
43
#include <
vnet/vnet.h
>
44
#include <
vnet/hdlc/packet.h
>
45
46
extern
vnet_hw_interface_class_t
hdlc_hw_interface_class
;
47
48
typedef
enum
49
{
50
#define hdlc_error(n,s) HDLC_ERROR_##n,
51
#include <
vnet/hdlc/error.def
>
52
#undef hdlc_error
53
HDLC_N_ERROR
,
54
}
hdlc_error_t
;
55
56
typedef
struct
57
{
58
/* Name (a c string). */
59
char
*
name
;
60
61
/* HDLC protocol type in host byte order. */
62
hdlc_protocol_t
protocol
;
63
64
/* Node which handles this type. */
65
u32
node_index
;
66
67
/* Next index for this type. */
68
u32
next_index
;
69
}
hdlc_protocol_info_t
;
70
71
typedef
struct
72
{
73
vlib_main_t
*
vlib_main
;
74
75
hdlc_protocol_info_t
*
protocol_infos
;
76
77
/* Hash tables mapping name/protocol to protocol info index. */
78
uword
*protocol_info_by_name, *
protocol_info_by_protocol
;
79
}
hdlc_main_t
;
80
81
always_inline
hdlc_protocol_info_t
*
82
hdlc_get_protocol_info
(
hdlc_main_t
* em,
hdlc_protocol_t
protocol
)
83
{
84
uword
*p =
hash_get
(em->
protocol_info_by_protocol
,
protocol
);
85
return
p ?
vec_elt_at_index
(em->
protocol_infos
, p[0]) : 0;
86
}
87
88
extern
hdlc_main_t
hdlc_main
;
89
90
/* Register given node index to take input for given hdlc type. */
91
void
92
hdlc_register_input_type
(
vlib_main_t
*
vm
,
93
hdlc_protocol_t
protocol
,
u32
node_index
);
94
95
format_function_t
format_hdlc_protocol
;
96
format_function_t
format_hdlc_header
;
97
format_function_t
format_hdlc_header_with_length
;
98
99
/* Parse hdlc protocol as 0xXXXX or protocol name.
100
In either host or network byte order. */
101
unformat_function_t
unformat_hdlc_protocol_host_byte_order
;
102
unformat_function_t
unformat_hdlc_protocol_net_byte_order
;
103
104
/* Parse hdlc header. */
105
unformat_function_t
unformat_hdlc_header
;
106
unformat_function_t
unformat_pg_hdlc_header
;
107
108
void
109
hdlc_register_input_protocol
(
vlib_main_t
*
vm
,
110
hdlc_protocol_t
protocol
,
u32
node_index
);
111
112
#endif
/* included_hdlc_h */
113
114
/*
115
* fd.io coding-style-patch-verification: ON
116
*
117
* Local Variables:
118
* eval: (c-set-style "gnu")
119
* End:
120
*/
hdlc_main_t::protocol_infos
hdlc_protocol_info_t * protocol_infos
Definition:
hdlc.h:75
hdlc_main
hdlc_main_t hdlc_main
Definition:
hdlc.c:44
hdlc_protocol_info_t::name
char * name
Definition:
hdlc.h:59
format_hdlc_header
format_function_t format_hdlc_header
Definition:
hdlc.h:96
unformat_hdlc_protocol_host_byte_order
unformat_function_t unformat_hdlc_protocol_host_byte_order
Definition:
hdlc.h:101
packet.h
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition:
nat44_ei.c:3047
node_index
node node_index
Definition:
interface_output.c:440
hdlc_register_input_type
void hdlc_register_input_type(vlib_main_t *vm, hdlc_protocol_t protocol, u32 node_index)
hdlc_register_input_protocol
void hdlc_register_input_protocol(vlib_main_t *vm, hdlc_protocol_t protocol, u32 node_index)
Definition:
node.c:358
hdlc_hw_interface_class
vnet_hw_interface_class_t hdlc_hw_interface_class
format_hdlc_protocol
format_function_t format_hdlc_protocol
Definition:
hdlc.h:95
hdlc_main_t::protocol_info_by_protocol
uword * protocol_info_by_protocol
Definition:
hdlc.h:78
vec_elt_at_index
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
Definition:
vec_bootstrap.h:203
hash_get
#define hash_get(h, key)
Definition:
hash.h:249
hdlc_main_t::vlib_main
vlib_main_t * vlib_main
Definition:
hdlc.h:73
uword
u64 uword
Definition:
types.h:112
unformat_hdlc_protocol_net_byte_order
unformat_function_t unformat_hdlc_protocol_net_byte_order
Definition:
hdlc.h:102
error.def
hdlc_get_protocol_info
static hdlc_protocol_info_t * hdlc_get_protocol_info(hdlc_main_t *em, hdlc_protocol_t protocol)
Definition:
hdlc.h:82
HDLC_N_ERROR
@ HDLC_N_ERROR
Definition:
hdlc.h:53
format_function_t
u8 *() format_function_t(u8 *s, va_list *args)
Definition:
format.h:48
hdlc_main_t
Definition:
hdlc.h:71
always_inline
#define always_inline
Definition:
rdma_mlx5dv.h:23
hdlc_protocol_t
hdlc_protocol_t
Definition:
packet.h:52
u32
unsigned int u32
Definition:
types.h:88
protocol
vl_api_ip_proto_t protocol
Definition:
lb_types.api:72
unformat_function_t
uword() unformat_function_t(unformat_input_t *input, va_list *args)
Definition:
format.h:225
vlib_main_t
Definition:
main.h:102
hdlc_protocol_info_t::next_index
u32 next_index
Definition:
hdlc.h:68
format_hdlc_header_with_length
format_function_t format_hdlc_header_with_length
Definition:
hdlc.h:97
unformat_hdlc_header
unformat_function_t unformat_hdlc_header
Definition:
hdlc.h:105
hdlc_protocol_info_t::protocol
hdlc_protocol_t protocol
Definition:
hdlc.h:62
vnet.h
hdlc_protocol_info_t
Definition:
hdlc.h:56
hdlc_protocol_info_t::node_index
u32 node_index
Definition:
hdlc.h:65
hdlc_error_t
hdlc_error_t
Definition:
hdlc.h:48
vnet_hw_interface_class_t
struct _vnet_hw_interface_class vnet_hw_interface_class_t
unformat_pg_hdlc_header
unformat_function_t unformat_pg_hdlc_header
Definition:
hdlc.h:106
src
vnet
hdlc
hdlc.h
Generated on Sat Jan 8 2022 10:36:29 for FD.io VPP by
1.8.17