FD.io VPP
v20.09-64-g4f7b92f0a
Vector Packet Processing
avf_api.c
Go to the documentation of this file.
1
/*
2
*------------------------------------------------------------------
3
* Copyright (c) 2018 Cisco and/or its affiliates.
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at:
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*------------------------------------------------------------------
16
*/
17
18
#include <
vlib/vlib.h
>
19
#include <
vlib/unix/unix.h
>
20
#include <
vlib/pci/pci.h
>
21
#include <
vnet/ethernet/ethernet.h
>
22
23
#include <
avf/avf.h
>
24
25
#include <
vlibapi/api.h
>
26
#include <
vlibmemory/api.h
>
27
28
/* define message IDs */
29
#include <avf/avf.api_enum.h>
30
#include <avf/avf.api_types.h>
31
32
#include <
vlibapi/api_helper_macros.h
>
33
34
static
void
35
vl_api_avf_create_t_handler
(
vl_api_avf_create_t
* mp)
36
{
37
vlib_main_t
*
vm
=
vlib_get_main
();
38
avf_main_t
*am = &
avf_main
;
39
vl_api_avf_create_reply_t
*rmp;
40
avf_create_if_args_t
args;
41
int
rv;
42
43
clib_memset
(&args, 0,
sizeof
(
avf_create_if_args_t
));
44
45
args.
enable_elog
= ntohl (mp->
enable_elog
);
46
args.
addr
.as_u32 = ntohl (mp->
pci_addr
);
47
args.
rxq_num
=
ntohs
(mp->
rxq_num
);
48
args.
rxq_size
=
ntohs
(mp->
rxq_size
);
49
args.
txq_size
=
ntohs
(mp->
txq_size
);
50
51
avf_create_if
(vm, &args);
52
rv = args.
rv
;
53
54
/* *INDENT-OFF* */
55
REPLY_MACRO2
(VL_API_AVF_CREATE_REPLY + am->
msg_id_base
,
56
({
57
rmp->sw_if_index = ntohl (args.sw_if_index);
58
}));
59
/* *INDENT-ON* */
60
}
61
62
static
void
63
vl_api_avf_delete_t_handler
(
vl_api_avf_delete_t
* mp)
64
{
65
vlib_main_t
*
vm
=
vlib_get_main
();
66
vnet_main_t
*vnm =
vnet_get_main
();
67
avf_main_t
*am = &
avf_main
;
68
vl_api_avf_delete_reply_t *rmp;
69
vnet_hw_interface_t
*hw;
70
int
rv = 0;
71
72
hw =
73
vnet_get_sup_hw_interface_api_visible_or_null
(vnm,
74
htonl (mp->
sw_if_index
));
75
if
(hw == NULL ||
avf_device_class
.index != hw->
dev_class_index
)
76
{
77
rv = VNET_API_ERROR_INVALID_INTERFACE;
78
goto
reply;
79
}
80
81
vlib_process_signal_event
(vm,
avf_process_node
.index,
82
AVF_PROCESS_EVENT_DELETE_IF
, hw->
dev_instance
);
83
84
reply:
85
REPLY_MACRO
(VL_API_AVF_DELETE_REPLY + am->
msg_id_base
);
86
}
87
88
/* set tup the API message handling tables */
89
#include <avf/avf.api.c>
90
static
clib_error_t
*
91
avf_plugin_api_hookup
(
vlib_main_t
*
vm
)
92
{
93
avf_main_t
*avm = &
avf_main
;
94
api_main_t
*am =
vlibapi_get_main
();
95
96
am->
is_mp_safe
[VL_API_AVF_DELETE] = 1;
97
98
/* ask for a correctly-sized block of API message decode slots */
99
avm->
msg_id_base
=
setup_message_id_table
();
100
return
0;
101
}
102
103
VLIB_API_INIT_FUNCTION
(
avf_plugin_api_hookup
);
104
105
/*
106
* fd.io coding-style-patch-verification: ON
107
*
108
* Local Variables:
109
* eval: (c-set-style "gnu")
110
* End:
111
*/
vl_api_avf_create_t::rxq_num
u16 rxq_num
Definition:
avf.api:39
ntohs
#define ntohs(x)
Definition:
af_xdp.bpf.c:29
vnet_get_main
vnet_main_t * vnet_get_main(void)
Definition:
misc.c:46
avf_main_t
Definition:
avf.h:224
REPLY_MACRO2
#define REPLY_MACRO2(t, body)
Definition:
api_helper_macros.h:65
clib_memset
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vl_api_avf_create_t::enable_elog
i32 enable_elog
Definition:
avf.api:38
VLIB_API_INIT_FUNCTION
VLIB_API_INIT_FUNCTION(avf_plugin_api_hookup)
avf_create_if_args_t::addr
vlib_pci_addr_t addr
Definition:
avf.h:238
vl_api_avf_create_t
Definition:
avf.api:32
vm
vlib_main_t * vm
Definition:
in2out_ed.c:1582
avf_device_class
vnet_device_class_t avf_device_class
vnet_hw_interface_t::dev_instance
u32 dev_instance
Definition:
interface.h:553
api.h
avf_create_if_args_t::txq_size
u16 txq_size
Definition:
avf.h:243
avf_create_if
void avf_create_if(vlib_main_t *vm, avf_create_if_args_t *args)
Definition:
device.c:1422
avf_plugin_api_hookup
static clib_error_t * avf_plugin_api_hookup(vlib_main_t *vm)
Definition:
avf_api.c:91
api_helper_macros.h
ethernet.h
vl_api_avf_create_t::pci_addr
u32 pci_addr
Definition:
avf.api:37
vlib_process_signal_event
static void vlib_process_signal_event(vlib_main_t *vm, uword node_index, uword type_opaque, uword data)
Definition:
node_funcs.h:1015
unix.h
pci.h
REPLY_MACRO
#define REPLY_MACRO(t)
Definition:
api_helper_macros.h:30
vl_api_avf_delete_t
Definition:
avf.api:64
vnet_hw_interface_t::dev_class_index
u32 dev_class_index
Definition:
interface.h:552
vl_api_avf_delete_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition:
avf.api:69
api_main_t
API main structure, used by both vpp and binary API clients.
Definition:
api_common.h:227
avf_process_node
vlib_node_registration_t avf_process_node
(constructor) VLIB_REGISTER_NODE (avf_process_node)
Definition:
device.c:1279
AVF_PROCESS_EVENT_DELETE_IF
Definition:
avf.h:203
vnet_hw_interface_t
Definition:
interface.h:530
vnet_get_sup_hw_interface_api_visible_or_null
static vnet_hw_interface_t * vnet_get_sup_hw_interface_api_visible_or_null(vnet_main_t *vnm, u32 sw_if_index)
Definition:
interface_funcs.h:101
vl_api_avf_create_t::rxq_size
u16 rxq_size
Definition:
avf.api:40
avf.h
vlib.h
vnet_main_t
Definition:
vnet.h:54
avf_create_if_args_t
Definition:
avf.h:236
vl_api_avf_delete_t_handler
static void vl_api_avf_delete_t_handler(vl_api_avf_delete_t *mp)
Definition:
avf_api.c:63
avf_main
avf_main_t avf_main
Definition:
device.c:37
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition:
global_funcs.h:23
avf_main_t::msg_id_base
u16 msg_id_base
Definition:
avf.h:226
clib_error_t
Definition:
clib_error.h:21
avf_create_if_args_t::rxq_size
u16 rxq_size
Definition:
avf.h:242
api.h
vlib_main_t
Definition:
main.h:120
vl_api_avf_create_t::txq_size
u16 txq_size
Definition:
avf.api:41
avf_create_if_args_t::enable_elog
int enable_elog
Definition:
avf.h:240
vlibapi_get_main
static api_main_t * vlibapi_get_main(void)
Definition:
api_common.h:389
vl_api_avf_create_reply_t
Definition:
avf.api:51
api_main_t::is_mp_safe
u8 * is_mp_safe
Message is mp safe vector.
Definition:
api_common.h:250
setup_message_id_table
static void setup_message_id_table(snat_main_t *sm, api_main_t *am)
Definition:
nat_api.c:2804
avf_create_if_args_t::rxq_num
u16 rxq_num
Definition:
avf.h:241
avf_create_if_args_t::rv
int rv
Definition:
avf.h:245
vl_api_avf_create_t_handler
static void vl_api_avf_create_t_handler(vl_api_avf_create_t *mp)
Definition:
avf_api.c:35
src
plugins
avf
avf_api.c
Generated on Thu Jun 3 2021 16:04:12 for FD.io VPP by
1.8.13