FD.io VPP
v20.01-48-g3e0dafb74
Vector Packet Processing
netmap_api.c
Go to the documentation of this file.
1
/*
2
*------------------------------------------------------------------
3
* netmap_api.c - netmap api
4
*
5
* Copyright (c) 2016 Cisco and/or its affiliates.
6
* Licensed under the Apache License, Version 2.0 (the "License");
7
* you may not use this file except in compliance with the License.
8
* You may obtain a copy of the License at:
9
*
10
* http://www.apache.org/licenses/LICENSE-2.0
11
*
12
* Unless required by applicable law or agreed to in writing, software
13
* distributed under the License is distributed on an "AS IS" BASIS,
14
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
* See the License for the specific language governing permissions and
16
* limitations under the License.
17
*------------------------------------------------------------------
18
*/
19
20
#include <
vnet/vnet.h
>
21
#include <
vlibmemory/api.h
>
22
23
#include <
vnet/interface.h
>
24
#include <
vnet/api_errno.h
>
25
#include <
vnet/devices/netmap/netmap.h
>
26
27
#include <
vnet/vnet_msg_enum.h
>
28
29
#define vl_typedefs
/* define message structures */
30
#include <
vnet/vnet_all_api_h.h
>
31
#undef vl_typedefs
32
33
#define vl_endianfun
/* define message structures */
34
#include <
vnet/vnet_all_api_h.h
>
35
#undef vl_endianfun
36
37
/* instantiate all the print functions we know about */
38
#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
39
#define vl_printfun
40
#include <
vnet/vnet_all_api_h.h
>
41
#undef vl_printfun
42
43
#include <
vlibapi/api_helper_macros.h
>
44
45
#define foreach_vpe_api_msg \
46
_(NETMAP_CREATE, netmap_create) \
47
_(NETMAP_DELETE, netmap_delete) \
48
49
static
void
50
vl_api_netmap_create_t_handler
(
vl_api_netmap_create_t
* mp)
51
{
52
vlib_main_t
*
vm
=
vlib_get_main
();
53
vl_api_netmap_create_reply_t *rmp;
54
int
rv = 0;
55
u8
*if_name =
NULL
;
56
57
if_name =
format
(0,
"%s"
, mp->
netmap_if_name
);
58
vec_add1
(if_name, 0);
59
60
rv =
61
netmap_create_if
(vm, if_name, mp->
use_random_hw_addr
? 0 : mp->
hw_addr
,
62
mp->
is_pipe
, mp->
is_master
, 0);
63
64
vec_free
(if_name);
65
66
REPLY_MACRO
(VL_API_NETMAP_CREATE_REPLY);
67
}
68
69
static
void
70
vl_api_netmap_delete_t_handler
(
vl_api_netmap_delete_t
* mp)
71
{
72
vlib_main_t
*
vm
=
vlib_get_main
();
73
vl_api_netmap_delete_reply_t *rmp;
74
int
rv = 0;
75
u8
*if_name =
NULL
;
76
77
if_name =
format
(0,
"%s"
, mp->
netmap_if_name
);
78
vec_add1
(if_name, 0);
79
80
rv =
netmap_delete_if
(vm, if_name);
81
82
vec_free
(if_name);
83
84
REPLY_MACRO
(VL_API_NETMAP_DELETE_REPLY);
85
}
86
87
/*
88
* netmap_api_hookup
89
* Add vpe's API message handlers to the table.
90
* vlib has already mapped shared memory and
91
* added the client registration handlers.
92
* See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process()
93
*/
94
#define vl_msg_name_crc_list
95
#include <
vnet/vnet_all_api_h.h
>
96
#undef vl_msg_name_crc_list
97
98
static
void
99
setup_message_id_table
(
api_main_t
* am)
100
{
101
#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
102
foreach_vl_msg_name_crc_netmap;
103
#undef _
104
}
105
106
static
clib_error_t
*
107
netmap_api_hookup
(
vlib_main_t
*
vm
)
108
{
109
api_main_t
*am =
vlibapi_get_main
();
110
111
#define _(N,n) \
112
vl_msg_api_set_handlers(VL_API_##N, #n, \
113
vl_api_##n##_t_handler, \
114
vl_noop_handler, \
115
vl_api_##n##_t_endian, \
116
vl_api_##n##_t_print, \
117
sizeof(vl_api_##n##_t), 1);
118
foreach_vpe_api_msg
;
119
#undef _
120
121
/*
122
* Set up the (msg_name, crc, message-id) table
123
*/
124
setup_message_id_table
(am);
125
126
return
0;
127
}
128
129
VLIB_API_INIT_FUNCTION
(
netmap_api_hookup
);
130
131
/*
132
* fd.io coding-style-patch-verification: ON
133
*
134
* Local Variables:
135
* eval: (c-set-style "gnu")
136
* End:
137
*/
netmap.h
foreach_vpe_api_msg
#define foreach_vpe_api_msg
Definition:
netmap_api.c:45
vl_api_netmap_create_t::is_master
u8 is_master
Definition:
netmap.api:36
vl_api_netmap_delete_t::netmap_if_name
u8 netmap_if_name[64]
Definition:
netmap.api:49
vl_api_netmap_create_t
Create netmap.
Definition:
netmap.api:27
NULL
#define NULL
Definition:
clib.h:58
setup_message_id_table
static void setup_message_id_table(api_main_t *am)
Definition:
netmap_api.c:99
vl_api_netmap_create_t::use_random_hw_addr
u8 use_random_hw_addr
Definition:
netmap.api:34
vec_add1
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
Definition:
vec.h:523
format
u8 * format(u8 *s, const char *fmt,...)
Definition:
format.c:424
vnet_msg_enum.h
vl_api_netmap_delete_t
Delete netmap.
Definition:
netmap.api:44
u8
unsigned char u8
Definition:
types.h:56
api_errno.h
api_helper_macros.h
vl_api_netmap_delete_t_handler
static void vl_api_netmap_delete_t_handler(vl_api_netmap_delete_t *mp)
Definition:
netmap_api.c:70
interface.h
netmap_api_hookup
static clib_error_t * netmap_api_hookup(vlib_main_t *vm)
Definition:
netmap_api.c:107
REPLY_MACRO
#define REPLY_MACRO(t)
Definition:
api_helper_macros.h:30
vl_api_netmap_create_t::is_pipe
u8 is_pipe
Definition:
netmap.api:35
vm
vlib_main_t * vm
Definition:
in2out_ed.c:1810
vnet.h
api_main_t
API main structure, used by both vpp and binary API clients.
Definition:
api_common.h:225
vec_free
#define vec_free(V)
Free vector's memory (no header).
Definition:
vec.h:342
netmap_create_if
int netmap_create_if(vlib_main_t *vm, u8 *if_name, u8 *hw_addr_set, u8 is_pipe, u8 is_master, u32 *sw_if_index)
Definition:
netmap.c:115
VLIB_API_INIT_FUNCTION
VLIB_API_INIT_FUNCTION(netmap_api_hookup)
vl_api_netmap_create_t::hw_addr
u8 hw_addr[6]
Definition:
netmap.api:33
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition:
global_funcs.h:23
clib_error_t
Definition:
clib_error.h:21
vnet_all_api_h.h
api.h
vlib_main_t
Definition:
main.h:83
vlibapi_get_main
static api_main_t * vlibapi_get_main(void)
Definition:
api_common.h:378
vl_api_netmap_create_t::netmap_if_name
u8 netmap_if_name[64]
Definition:
netmap.api:32
vl_api_netmap_create_t_handler
static void vl_api_netmap_create_t_handler(vl_api_netmap_create_t *mp)
Definition:
netmap_api.c:50
netmap_delete_if
int netmap_delete_if(vlib_main_t *vm, u8 *host_if_name)
Definition:
netmap.c:246
src
vnet
devices
netmap
netmap_api.c
Generated on Wed Sep 9 2020 00:04:35 for FD.io VPP by
1.8.13