FD.io VPP  v21.10.1-2-g0a485f517
Vector Packet Processing
vhost_user_api.c
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * vhost-user_api.c - vhost-user 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>
26 #include <vnet/ethernet/ethernet.h>
29 
30 #include <vnet/format_fns.h>
31 #include <vnet/devices/virtio/vhost_user.api_enum.h>
32 #include <vnet/devices/virtio/vhost_user.api_types.h>
33 
34 #define REPLY_MSG_ID_BASE msg_id_base
36 
38 
39 static void
41 {
42  int rv = 0;
44  vnet_main_t *vnm = vnet_get_main ();
46  u64 disabled_features = (u64) (0ULL);
47  vhost_user_create_if_args_t args = { 0 };
48 
49  args.sw_if_index = (u32) ~ 0;
50  args.feature_mask = (u64) ~ (0ULL);
51  if (mp->disable_mrg_rxbuf)
52  disabled_features = VIRTIO_FEATURE (VIRTIO_NET_F_MRG_RXBUF);
53 
54  if (mp->disable_indirect_desc)
55  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_INDIRECT_DESC);
56 
57  /*
58  * GSO and PACKED are not supported by feature mask via binary API. We
59  * disable GSO and PACKED feature in the feature mask. They may be enabled
60  * explicitly via enable_gso and enable_packed argument
61  */
63  VIRTIO_FEATURE (VIRTIO_F_RING_PACKED);
64 
65  /* EVENT_IDX is disabled by default */
66  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_EVENT_IDX);
67  args.feature_mask &= ~disabled_features;
68 
69  if (mp->use_custom_mac)
71 
72  args.use_custom_mac = mp->use_custom_mac;
73  args.is_server = mp->is_server;
74  args.sock_filename = (char *) mp->sock_filename;
75  args.renumber = mp->renumber;
76  args.custom_dev_instance = ntohl (mp->custom_dev_instance);
77  args.enable_gso = mp->enable_gso;
78  args.enable_packed = mp->enable_packed;
79  rv = vhost_user_create_if (vnm, vm, &args);
80 
81  /* Remember an interface tag for the new interface */
82  if (rv == 0)
83  {
84  /* If a tag was supplied... */
85  if (mp->tag[0])
86  {
87  /* Make sure it's a proper C-string */
88  mp->tag[ARRAY_LEN (mp->tag) - 1] = 0;
89  u8 *tag = format (0, "%s%c", mp->tag, 0);
90  vnet_set_sw_interface_tag (vnm, tag, args.sw_if_index);
91  }
92  }
93 
94  /* *INDENT-OFF* */
95  REPLY_MACRO2(VL_API_CREATE_VHOST_USER_IF_REPLY,
96  ({
97  rmp->sw_if_index = ntohl (args.sw_if_index);
98  }));
99  /* *INDENT-ON* */
100 }
101 
102 static void
104 {
105  int rv = 0;
106  vl_api_modify_vhost_user_if_reply_t *rmp;
107  u64 disabled_features = (u64) (0ULL);
108  vhost_user_create_if_args_t args = { 0 };
109  vnet_main_t *vnm = vnet_get_main ();
111 
112  args.feature_mask = (u64) ~ (0ULL);
113  /*
114  * GSO and PACKED are not supported by feature mask via binary API. We
115  * disable GSO and PACKED feature in the feature mask. They may be enabled
116  * explicitly via enable_gso and enable_packed argument
117  */
119  VIRTIO_FEATURE (VIRTIO_F_RING_PACKED);
120 
121  /* EVENT_IDX is disabled by default */
122  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_EVENT_IDX);
123  args.feature_mask &= ~disabled_features;
124 
125  args.sw_if_index = ntohl (mp->sw_if_index);
126  args.sock_filename = (char *) mp->sock_filename;
127  args.is_server = mp->is_server;
128  args.renumber = mp->renumber;
129  args.custom_dev_instance = ntohl (mp->custom_dev_instance);
130  args.enable_gso = mp->enable_gso;
131  args.enable_packed = mp->enable_packed;
132  rv = vhost_user_modify_if (vnm, vm, &args);
133 
134  REPLY_MACRO (VL_API_MODIFY_VHOST_USER_IF_REPLY);
135 }
136 
137 static void
139  mp)
140 {
141  int rv = 0;
143  vnet_main_t *vnm = vnet_get_main ();
145  u64 disabled_features = (u64) (0ULL);
146  vhost_user_create_if_args_t args = { 0 };
147 
148  args.sw_if_index = (u32) ~ 0;
149  args.feature_mask = (u64) ~ (0ULL);
150  if (mp->disable_mrg_rxbuf)
151  disabled_features = VIRTIO_FEATURE (VIRTIO_NET_F_MRG_RXBUF);
152 
153  if (mp->disable_indirect_desc)
154  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_INDIRECT_DESC);
155 
156  /*
157  * GSO and PACKED are not supported by feature mask via binary API. We
158  * disable GSO and PACKED feature in the feature mask. They may be enabled
159  * explicitly via enable_gso and enable_packed argument
160  */
162  VIRTIO_FEATURE (VIRTIO_F_RING_PACKED);
163 
164  /* EVENT_IDX is disabled by default */
165  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_EVENT_IDX);
166  args.feature_mask &= ~disabled_features;
167 
168  if (mp->use_custom_mac)
170 
171  args.is_server = mp->is_server;
172  args.sock_filename = (char *) mp->sock_filename;
173  args.renumber = mp->renumber;
174  args.custom_dev_instance = ntohl (mp->custom_dev_instance);
175  args.enable_gso = mp->enable_gso;
176  args.enable_packed = mp->enable_packed;
178  rv = vhost_user_create_if (vnm, vm, &args);
179 
180  /* Remember an interface tag for the new interface */
181  if (rv == 0)
182  {
183  /* If a tag was supplied... */
184  if (mp->tag[0])
185  {
186  /* Make sure it's a proper C-string */
187  mp->tag[ARRAY_LEN (mp->tag) - 1] = 0;
188  u8 *tag = format (0, "%s%c", mp->tag, 0);
189  vnet_set_sw_interface_tag (vnm, tag, args.sw_if_index);
190  }
191  }
192 
193  /* *INDENT-OFF* */
194  REPLY_MACRO2(VL_API_CREATE_VHOST_USER_IF_V2_REPLY,
195  ({
196  rmp->sw_if_index = ntohl (args.sw_if_index);
197  }));
198  /* *INDENT-ON* */
199 }
200 
201 static void
203  mp)
204 {
205  int rv = 0;
206  vl_api_modify_vhost_user_if_v2_reply_t *rmp;
207  u64 disabled_features = (u64) (0ULL);
208  vhost_user_create_if_args_t args = { 0 };
209  vnet_main_t *vnm = vnet_get_main ();
211 
212  args.feature_mask = (u64) ~ (0ULL);
213  /*
214  * GSO and PACKED are not supported by feature mask via binary API. We
215  * disable GSO and PACKED feature in the feature mask. They may be enabled
216  * explicitly via enable_gso and enable_packed argument
217  */
219  VIRTIO_FEATURE (VIRTIO_F_RING_PACKED);
220 
221  /* EVENT_IDX is disabled by default */
222  disabled_features |= VIRTIO_FEATURE (VIRTIO_RING_F_EVENT_IDX);
223  args.feature_mask &= ~disabled_features;
224 
225  args.sw_if_index = ntohl (mp->sw_if_index);
226  args.sock_filename = (char *) mp->sock_filename;
227  args.is_server = mp->is_server;
228  args.renumber = mp->renumber;
229  args.custom_dev_instance = ntohl (mp->custom_dev_instance);
230  args.enable_gso = mp->enable_gso;
231  args.enable_packed = mp->enable_packed;
233  rv = vhost_user_modify_if (vnm, vm, &args);
234 
235  REPLY_MACRO (VL_API_MODIFY_VHOST_USER_IF_V2_REPLY);
236 }
237 
238 static void
240 {
241  int rv = 0;
242  vl_api_delete_vhost_user_if_reply_t *rmp;
243  u32 sw_if_index = ntohl (mp->sw_if_index);
245 
246  vnet_main_t *vnm = vnet_get_main ();
248 
250 
251  REPLY_MACRO (VL_API_DELETE_VHOST_USER_IF_REPLY);
252  if (!rv)
253  {
255  if (!reg)
256  return;
257 
259  }
260 }
261 
262 static void
264  vl_api_registration_t * reg,
266  u32 context)
267 {
269 
270  mp = vl_msg_api_alloc (sizeof (*mp));
271  clib_memset (mp, 0, sizeof (*mp));
272  mp->_vl_msg_id =
273  ntohs (REPLY_MSG_ID_BASE + VL_API_SW_INTERFACE_VHOST_USER_DETAILS);
274  mp->sw_if_index = ntohl (vui->sw_if_index);
275  mp->virtio_net_hdr_sz = ntohl (vui->virtio_net_hdr_sz);
277  (u32 *) & mp->features_last_32);
278  mp->is_server = vui->is_server;
279  mp->num_regions = ntohl (vui->num_regions);
280  mp->sock_errno = ntohl (vui->sock_errno);
281  mp->context = context;
282 
283  strncpy ((char *) mp->sock_filename,
284  (char *) vui->sock_filename, ARRAY_LEN (mp->sock_filename) - 1);
285  strncpy ((char *) mp->interface_name,
286  (char *) vui->if_name, ARRAY_LEN (mp->interface_name) - 1);
287 
288  vl_api_send_msg (reg, (u8 *) mp);
289 }
290 
291 static void
294 {
295  int rv = 0;
297  vnet_main_t *vnm = vnet_get_main ();
299  vhost_user_intf_details_t *ifaces = NULL;
300  vhost_user_intf_details_t *vuid = NULL;
302  u32 filter_sw_if_index;
303 
305  if (!reg)
306  return;
307 
308  filter_sw_if_index = htonl (mp->sw_if_index);
309  if (filter_sw_if_index != ~0)
311 
312  rv = vhost_user_dump_ifs (vnm, vm, &ifaces);
313  if (rv)
314  return;
315 
316  vec_foreach (vuid, ifaces)
317  {
318  if ((filter_sw_if_index == ~0) ||
319  (vuid->sw_if_index == filter_sw_if_index))
321  }
323  vec_free (ifaces);
324 }
325 
326 #include <vnet/devices/virtio/vhost_user.api.c>
327 static clib_error_t *
329 {
331  /* Mark CREATE_VHOST_USER_IF as mp safe */
332  am->is_mp_safe[VL_API_CREATE_VHOST_USER_IF] = 1;
333  am->is_mp_safe[VL_API_CREATE_VHOST_USER_IF_V2] = 1;
334 
335  /*
336  * Set up the (msg_name, crc, message-id) table
337  */
339 
340  return 0;
341 }
342 
344 
345 /*
346  * fd.io coding-style-patch-verification: ON
347  *
348  * Local Variables:
349  * eval: (c-set-style "gnu")
350  * End:
351  */
msg_id_base
static u16 msg_id_base
Definition: vhost_user_api.c:37
vl_api_create_vhost_user_if_t_handler
static void vl_api_create_vhost_user_if_t_handler(vl_api_create_vhost_user_if_t *mp)
Definition: vhost_user_api.c:40
vl_api_modify_vhost_user_if_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:76
vhost_user_create_if_args_t::is_server
u8 is_server
Definition: vhost_user.h:108
vhost_user_create_if_args_t::custom_dev_instance
u32 custom_dev_instance
Definition: vhost_user.h:105
vl_api_sw_interface_vhost_user_details_t::num_regions
u32 num_regions
Definition: vhost_user.api:184
VALIDATE_SW_IF_INDEX
#define VALIDATE_SW_IF_INDEX(mp)
Definition: api_helper_macros.h:281
vl_api_client_index_to_registration
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
Definition: api.h:79
api.h
vl_api_modify_vhost_user_if_t::enable_gso
bool enable_gso
Definition: vhost_user.api:80
virtio_features_encode
void virtio_features_encode(u64 features, u32 *first, u32 *last)
Definition: virtio_types_api.c:29
vl_api_create_vhost_user_if_v2_t
vhost-user interface create request
Definition: vhost_user.api:99
vl_api_sw_interface_vhost_user_dump_t::client_index
u32 client_index
Definition: vhost_user.api:193
vl_api_create_vhost_user_if_v2_reply_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:126
ntohs
#define ntohs(x)
Definition: af_xdp.bpf.c:29
vl_api_create_vhost_user_if_reply_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:61
vl_api_create_vhost_user_if_reply_t
vhost-user interface create response
Definition: vhost_user.api:56
REPLY_MACRO2
#define REPLY_MACRO2(t, body)
Definition: api_helper_macros.h:65
vhost_user_intf_details_t::if_name
u8 if_name[64]
Definition: vhost_user.h:360
vl_api_sw_interface_vhost_user_details_t::features_last_32
vl_api_virtio_net_features_last_32_t features_last_32
Definition: vhost_user.api:181
vl_api_send_msg
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
Definition: api.h:35
vhost_user_dump_ifs
int vhost_user_dump_ifs(vnet_main_t *vnm, vlib_main_t *vm, vhost_user_intf_details_t **out_vuids)
Definition: vhost_user.c:1890
vl_api_create_vhost_user_if_t::disable_mrg_rxbuf
bool disable_mrg_rxbuf
Definition: vhost_user.api:41
vhost_user_create_if_args_t::enable_gso
u8 enable_gso
Definition: vhost_user.h:109
vl_api_sw_interface_vhost_user_details_t::sock_filename
string sock_filename[256]
Definition: vhost_user.api:183
vl_api_sw_interface_vhost_user_dump_t_handler
static void vl_api_sw_interface_vhost_user_dump_t_handler(vl_api_sw_interface_vhost_user_dump_t *mp)
Definition: vhost_user_api.c:293
vl_api_create_vhost_user_if_v2_t::custom_dev_instance
u32 custom_dev_instance
Definition: vhost_user.api:111
vpe_api_main_t
Definition: api_helper_macros.h:414
vl_api_create_vhost_user_if_t::is_server
bool is_server
Definition: vhost_user.api:38
vhost_user_create_if_args_t
Definition: vhost_user.h:101
u16
unsigned short u16
Definition: types.h:57
vl_api_create_vhost_user_if_v2_t::renumber
bool renumber
Definition: vhost_user.api:105
vl_api_create_vhost_user_if_v2_t::disable_mrg_rxbuf
bool disable_mrg_rxbuf
Definition: vhost_user.api:106
am
app_main_t * am
Definition: application.c:489
vl_api_modify_vhost_user_if_v2_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:143
vhost_user_api_hookup
static clib_error_t * vhost_user_api_hookup(vlib_main_t *vm)
Definition: vhost_user_api.c:328
vl_api_sw_interface_vhost_user_details_t::sock_errno
i32 sock_errno
Definition: vhost_user.api:185
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
VIRTIO_FEATURE
#define VIRTIO_FEATURE(X)
Definition: virtio_std.h:67
vl_api_modify_vhost_user_if_t::is_server
bool is_server
Definition: vhost_user.api:77
vl_api_modify_vhost_user_if_v2_t
vhost-user interface modify request
Definition: vhost_user.api:139
vhost_user_create_if_args_t::enable_packed
u8 enable_packed
Definition: vhost_user.h:110
vl_api_modify_vhost_user_if_v2_t::enable_packed
bool enable_packed
Definition: vhost_user.api:148
vhost_user_intf_details_t::is_server
u8 is_server
Definition: vhost_user.h:364
vhost_user_create_if_args_t::use_custom_mac
u8 use_custom_mac
Definition: vhost_user.h:112
vl_api_sw_interface_vhost_user_details_t::interface_name
string interface_name[64]
Definition: vhost_user.api:178
vl_api_create_vhost_user_if_v2_t::is_server
bool is_server
Definition: vhost_user.api:103
vhost_user_intf_details_t::virtio_net_hdr_sz
u32 virtio_net_hdr_sz
Definition: vhost_user.h:362
ethernet.h
vl_api_create_vhost_user_if_t::custom_dev_instance
u32 custom_dev_instance
Definition: vhost_user.api:45
virtio_types_api.h
vhost_user_intf_details_t::sock_filename
u8 sock_filename[256]
Definition: vhost_user.h:365
vl_api_modify_vhost_user_if_t
vhost-user interface modify request
Definition: vhost_user.api:71
vl_api_sw_interface_vhost_user_details_t::is_server
bool is_server
Definition: vhost_user.api:182
vhost_user_intf_details_t::sock_errno
int sock_errno
Definition: vhost_user.h:367
vl_api_create_vhost_user_if_v2_t::enable_event_idx
bool enable_event_idx
Definition: vhost_user.api:110
vl_api_sw_interface_vhost_user_details_t::virtio_net_hdr_sz
u32 virtio_net_hdr_sz
Definition: vhost_user.api:179
vl_api_modify_vhost_user_if_t_handler
static void vl_api_modify_vhost_user_if_t_handler(vl_api_modify_vhost_user_if_t *mp)
Definition: vhost_user_api.c:103
vnet_get_main
vnet_main_t * vnet_get_main(void)
Definition: pnat_test_stubs.h:56
FEATURE_VIRTIO_NET_F_HOST_GUEST_TSO_FEATURE_BITS
#define FEATURE_VIRTIO_NET_F_HOST_GUEST_TSO_FEATURE_BITS
Definition: vhost_user.h:96
vl_api_delete_vhost_user_if_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:160
vl_api_registration_
An API client registration, only in vpp/vlib.
Definition: api_common.h:47
REPLY_MACRO
#define REPLY_MACRO(t)
Definition: api_helper_macros.h:30
setup_message_id_table
static void setup_message_id_table(api_main_t *am)
Definition: sr_mpls_api.c:174
ARRAY_LEN
#define ARRAY_LEN(x)
Definition: clib.h:70
vl_api_create_vhost_user_if_t::use_custom_mac
bool use_custom_mac
Definition: vhost_user.api:46
vl_api_modify_vhost_user_if_v2_t::is_server
bool is_server
Definition: vhost_user.api:144
vl_api_sw_interface_vhost_user_details_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: vhost_user.api:177
vl_api_sw_interface_vhost_user_details_t::features_first_32
vl_api_virtio_net_features_first_32_t features_first_32
Definition: vhost_user.api:180
vl_api_create_vhost_user_if_t::tag
string tag[64]
Definition: vhost_user.api:48
vlibapi_get_main
static api_main_t * vlibapi_get_main(void)
Definition: api_common.h:390
vnet_set_sw_interface_tag
static void vnet_set_sw_interface_tag(vnet_main_t *vnm, u8 *tag, u32 sw_if_index)
Definition: interface_funcs.h:141
interface.h
vhost_user_intf_details_t::features
u64 features
Definition: vhost_user.h:363
vl_api_modify_vhost_user_if_t::renumber
bool renumber
Definition: vhost_user.api:79
vl_api_create_vhost_user_if_v2_t::mac_address
vl_api_mac_address_t mac_address
Definition: vhost_user.api:113
vhost_user_create_if_args_t::enable_event_idx
u8 enable_event_idx
Definition: vhost_user.h:111
vl_api_create_vhost_user_if_t::disable_indirect_desc
bool disable_indirect_desc
Definition: vhost_user.api:42
vl_api_delete_vhost_user_if_t::client_index
u32 client_index
Definition: vhost_user.api:158
vl_api_create_vhost_user_if_t::sock_filename
string sock_filename[256]
Definition: vhost_user.api:39
vl_api_create_vhost_user_if_t::enable_gso
bool enable_gso
Definition: vhost_user.api:43
BAD_SW_IF_INDEX_LABEL
#define BAD_SW_IF_INDEX_LABEL
Definition: api_helper_macros.h:289
api_main_t
API main structure, used by both vpp and binary API clients.
Definition: api_common.h:228
vl_api_create_vhost_user_if_v2_t::enable_gso
bool enable_gso
Definition: vhost_user.api:108
vnet_main_t
Definition: vnet.h:76
vec_free
#define vec_free(V)
Free vector's memory (no header).
Definition: vec.h:395
vl_api_modify_vhost_user_if_t::custom_dev_instance
u32 custom_dev_instance
Definition: vhost_user.api:82
vl_api_create_vhost_user_if_v2_t::enable_packed
bool enable_packed
Definition: vhost_user.api:109
REPLY_MSG_ID_BASE
#define REPLY_MSG_ID_BASE
Definition: vhost_user_api.c:34
vl_api_create_vhost_user_if_t::renumber
bool renumber
Definition: vhost_user.api:40
format_fns.h
u64
unsigned long u64
Definition: types.h:89
vl_api_create_vhost_user_if_v2_t::sock_filename
string sock_filename[256]
Definition: vhost_user.api:104
vl_api_modify_vhost_user_if_v2_t::enable_event_idx
bool enable_event_idx
Definition: vhost_user.api:149
format
description fragment has unexpected format
Definition: map.api:433
vl_api_modify_vhost_user_if_v2_t::renumber
bool renumber
Definition: vhost_user.api:146
vl_api_create_vhost_user_if_t::enable_packed
bool enable_packed
Definition: vhost_user.api:44
send_sw_interface_vhost_user_details
static void send_sw_interface_vhost_user_details(vpe_api_main_t *am, vl_api_registration_t *reg, vhost_user_intf_details_t *vui, u32 context)
Definition: vhost_user_api.c:263
vl_api_modify_vhost_user_if_v2_t::sock_filename
string sock_filename[256]
Definition: vhost_user.api:145
u32
unsigned int u32
Definition: types.h:88
vl_api_modify_vhost_user_if_t::sock_filename
string sock_filename[256]
Definition: vhost_user.api:78
vnet_clear_sw_interface_tag
static void vnet_clear_sw_interface_tag(vnet_main_t *vnm, u32 sw_if_index)
Definition: interface_funcs.h:156
vhost_user_create_if_args_t::feature_mask
u64 feature_mask
Definition: vhost_user.h:104
ethernet_types_api.h
api_helper_macros.h
vec_foreach
#define vec_foreach(var, vec)
Vector iterator.
Definition: vec_bootstrap.h:213
vl_api_sw_interface_vhost_user_dump_t::context
u32 context
Definition: vhost_user.api:194
mac_address_decode
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
Definition: ethernet_types_api.c:20
vl_api_modify_vhost_user_if_v2_t::custom_dev_instance
u32 custom_dev_instance
Definition: vhost_user.api:150
vhost_user_modify_if
int vhost_user_modify_if(vnet_main_t *vnm, vlib_main_t *vm, vhost_user_create_if_args_t *args)
Definition: vhost_user.c:1725
mac_address_t_
Definition: mac_address.h:21
vl_api_modify_vhost_user_if_t::enable_packed
bool enable_packed
Definition: vhost_user.api:81
vl_api_create_vhost_user_if_v2_t::disable_indirect_desc
bool disable_indirect_desc
Definition: vhost_user.api:107
clib_memset
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vlib_main_t
Definition: main.h:102
vl_api_delete_vhost_user_if_t
vhost-user interface delete request
Definition: vhost_user.api:156
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition: global_funcs.h:38
vhost_user_intf_details_t::num_regions
u32 num_regions
Definition: vhost_user.h:366
u8
unsigned char u8
Definition: types.h:56
clib_error_t
Definition: clib_error.h:21
vl_api_create_vhost_user_if_t
vhost-user interface create request
Definition: vhost_user.api:33
vhost_user.h
vl_api_create_vhost_user_if_t::mac_address
vl_api_mac_address_t mac_address
Definition: vhost_user.api:47
vl_api_sw_interface_vhost_user_details_t
Vhost-user interface details structure (fix this)
Definition: vhost_user.api:174
vl_api_delete_vhost_user_if_t_handler
static void vl_api_delete_vhost_user_if_t_handler(vl_api_delete_vhost_user_if_t *mp)
Definition: vhost_user_api.c:239
vl_api_create_vhost_user_if_v2_t_handler
static void vl_api_create_vhost_user_if_v2_t_handler(vl_api_create_vhost_user_if_v2_t *mp)
Definition: vhost_user_api.c:138
vhost_user_create_if_args_t::sock_filename
char * sock_filename
Definition: vhost_user.h:103
vl_api_modify_vhost_user_if_v2_t_handler
static void vl_api_modify_vhost_user_if_v2_t_handler(vl_api_modify_vhost_user_if_v2_t *mp)
Definition: vhost_user_api.c:202
vhost_user_create_if_args_t::sw_if_index
u32 sw_if_index
Definition: vhost_user.h:115
context
u32 context
Definition: ip.api:852
vhost_user_delete_if
int vhost_user_delete_if(vnet_main_t *vnm, vlib_main_t *vm, u32 sw_if_index)
Definition: vhost_user.c:1433
rv
int __clib_unused rv
Definition: application.c:491
vl_api_modify_vhost_user_if_v2_t::enable_gso
bool enable_gso
Definition: vhost_user.api:147
vhost_user_intf_details_t::sw_if_index
u32 sw_if_index
Definition: vhost_user.h:361
vnet.h
api_errno.h
VLIB_API_INIT_FUNCTION
VLIB_API_INIT_FUNCTION(vhost_user_api_hookup)
vl_api_create_vhost_user_if_v2_reply_t
vhost-user interface create response
Definition: vhost_user.api:122
vl_api_sw_interface_vhost_user_dump_t
Vhost-user interface dump request.
Definition: vhost_user.api:191
sw_if_index
vl_api_interface_index_t sw_if_index
Definition: wireguard.api:34
vl_api_create_vhost_user_if_v2_t::use_custom_mac
bool use_custom_mac
Definition: vhost_user.api:112
vhost_user_intf_details_t
Definition: vhost_user.h:358
vl_api_sw_interface_vhost_user_details_t::context
u32 context
Definition: vhost_user.api:176
vl_api_sw_interface_vhost_user_dump_t::sw_if_index
vl_api_interface_index_t sw_if_index[default=0xffffffff]
Definition: vhost_user.api:195
vhost_user_create_if_args_t::renumber
u8 renumber
Definition: vhost_user.h:107
vl_api_create_vhost_user_if_v2_t::tag
string tag[64]
Definition: vhost_user.api:114
vhost_user_create_if_args_t::hwaddr
u8 hwaddr[6]
Definition: vhost_user.h:106
vhost_user_create_if
int vhost_user_create_if(vnet_main_t *vnm, vlib_main_t *vm, vhost_user_create_if_args_t *args)
Definition: vhost_user.c:1669
vpe_api_main
vpe_api_main_t vpe_api_main
Definition: interface_api.c:47
vl_msg_api_alloc
void * vl_msg_api_alloc(int nbytes)
Definition: memory_shared.c:199