1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  * Copyright(c) 2016 Intel Corporation
32bfe3f2eSlogwang  */
42bfe3f2eSlogwang 
5*4418919fSjohnjiang #ifndef _VHOST_KERNEL_TAP_H
6*4418919fSjohnjiang #define _VHOST_KERNEL_TAP_H
7*4418919fSjohnjiang 
8*4418919fSjohnjiang #include <stdbool.h>
92bfe3f2eSlogwang #include <sys/ioctl.h>
102bfe3f2eSlogwang 
112bfe3f2eSlogwang /* TUN ioctls */
122bfe3f2eSlogwang #define TUNSETIFF     _IOW('T', 202, int)
132bfe3f2eSlogwang #define TUNGETFEATURES _IOR('T', 207, unsigned int)
142bfe3f2eSlogwang #define TUNSETOFFLOAD  _IOW('T', 208, unsigned int)
152bfe3f2eSlogwang #define TUNGETIFF      _IOR('T', 210, unsigned int)
162bfe3f2eSlogwang #define TUNSETSNDBUF   _IOW('T', 212, int)
172bfe3f2eSlogwang #define TUNGETVNETHDRSZ _IOR('T', 215, int)
182bfe3f2eSlogwang #define TUNSETVNETHDRSZ _IOW('T', 216, int)
192bfe3f2eSlogwang #define TUNSETQUEUE  _IOW('T', 217, int)
202bfe3f2eSlogwang #define TUNSETVNETLE _IOW('T', 220, int)
212bfe3f2eSlogwang #define TUNSETVNETBE _IOW('T', 222, int)
222bfe3f2eSlogwang 
232bfe3f2eSlogwang /* TUNSETIFF ifr flags */
242bfe3f2eSlogwang #define IFF_TAP          0x0002
252bfe3f2eSlogwang #define IFF_NO_PI        0x1000
262bfe3f2eSlogwang #define IFF_ONE_QUEUE    0x2000
272bfe3f2eSlogwang #define IFF_VNET_HDR     0x4000
282bfe3f2eSlogwang #define IFF_MULTI_QUEUE  0x0100
292bfe3f2eSlogwang #define IFF_ATTACH_QUEUE 0x0200
302bfe3f2eSlogwang #define IFF_DETACH_QUEUE 0x0400
312bfe3f2eSlogwang 
322bfe3f2eSlogwang /* Features for GSO (TUNSETOFFLOAD). */
332bfe3f2eSlogwang #define TUN_F_CSUM	0x01	/* You can hand me unchecksummed packets. */
342bfe3f2eSlogwang #define TUN_F_TSO4	0x02	/* I can handle TSO for IPv4 packets */
352bfe3f2eSlogwang #define TUN_F_TSO6	0x04	/* I can handle TSO for IPv6 packets */
362bfe3f2eSlogwang #define TUN_F_TSO_ECN	0x08	/* I can handle TSO with ECN bits. */
372bfe3f2eSlogwang #define TUN_F_UFO	0x10	/* I can handle UFO packets */
382bfe3f2eSlogwang 
392bfe3f2eSlogwang /* Constants */
402bfe3f2eSlogwang #define PATH_NET_TUN	"/dev/net/tun"
412bfe3f2eSlogwang 
42d30ea906Sjfb8856606 int vhost_kernel_open_tap(char **p_ifname, int hdr_size, int req_mq,
43d30ea906Sjfb8856606 			 const char *mac, uint64_t features);
44*4418919fSjohnjiang int vhost_kernel_tap_set_offload(int fd, uint64_t features);
45*4418919fSjohnjiang int vhost_kernel_tap_set_queue(int fd, bool attach);
46*4418919fSjohnjiang 
47*4418919fSjohnjiang #endif
48