119 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2/*3 * Universal TUN/TAP device driver.4 * Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>5 *6 * This program is free software; you can redistribute it and/or modify7 * it under the terms of the GNU General Public License as published by8 * the Free Software Foundation; either version 2 of the License, or9 * (at your option) any later version.10 *11 * This program is distributed in the hope that it will be useful,12 * but WITHOUT ANY WARRANTY; without even the implied warranty of13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the14 * GNU General Public License for more details.15 */16 17#ifndef _UAPI__IF_TUN_H18#define _UAPI__IF_TUN_H19 20#include <linux/types.h>21#include <linux/if_ether.h>22#include <linux/filter.h>23 24/* Read queue size */25#define TUN_READQ_SIZE 50026/* TUN device type flags: deprecated. Use IFF_TUN/IFF_TAP instead. */27#define TUN_TUN_DEV IFF_TUN28#define TUN_TAP_DEV IFF_TAP29#define TUN_TYPE_MASK 0x000f30 31/* Ioctl defines */32#define TUNSETNOCSUM _IOW('T', 200, int) 33#define TUNSETDEBUG _IOW('T', 201, int) 34#define TUNSETIFF _IOW('T', 202, int) 35#define TUNSETPERSIST _IOW('T', 203, int) 36#define TUNSETOWNER _IOW('T', 204, int)37#define TUNSETLINK _IOW('T', 205, int)38#define TUNSETGROUP _IOW('T', 206, int)39#define TUNGETFEATURES _IOR('T', 207, unsigned int)40#define TUNSETOFFLOAD _IOW('T', 208, unsigned int)41#define TUNSETTXFILTER _IOW('T', 209, unsigned int)42#define TUNGETIFF _IOR('T', 210, unsigned int)43#define TUNGETSNDBUF _IOR('T', 211, int)44#define TUNSETSNDBUF _IOW('T', 212, int)45#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog)46#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)47#define TUNGETVNETHDRSZ _IOR('T', 215, int)48#define TUNSETVNETHDRSZ _IOW('T', 216, int)49#define TUNSETQUEUE _IOW('T', 217, int)50#define TUNSETIFINDEX _IOW('T', 218, unsigned int)51#define TUNGETFILTER _IOR('T', 219, struct sock_fprog)52#define TUNSETVNETLE _IOW('T', 220, int)53#define TUNGETVNETLE _IOR('T', 221, int)54/* The TUNSETVNETBE and TUNGETVNETBE ioctls are for cross-endian support on55 * little-endian hosts. Not all kernel configurations support them, but all56 * configurations that support SET also support GET.57 */58#define TUNSETVNETBE _IOW('T', 222, int)59#define TUNGETVNETBE _IOR('T', 223, int)60#define TUNSETSTEERINGEBPF _IOR('T', 224, int)61#define TUNSETFILTEREBPF _IOR('T', 225, int)62#define TUNSETCARRIER _IOW('T', 226, int)63#define TUNGETDEVNETNS _IO('T', 227)64 65/* TUNSETIFF ifr flags */66#define IFF_TUN 0x000167#define IFF_TAP 0x000268#define IFF_NAPI 0x001069#define IFF_NAPI_FRAGS 0x002070/* Used in TUNSETIFF to bring up tun/tap without carrier */71#define IFF_NO_CARRIER 0x004072#define IFF_NO_PI 0x100073/* This flag has no real effect */74#define IFF_ONE_QUEUE 0x200075#define IFF_VNET_HDR 0x400076#define IFF_TUN_EXCL 0x800077#define IFF_MULTI_QUEUE 0x010078#define IFF_ATTACH_QUEUE 0x020079#define IFF_DETACH_QUEUE 0x040080/* read-only flag */81#define IFF_PERSIST 0x080082#define IFF_NOFILTER 0x100083 84/* Socket options */85#define TUN_TX_TIMESTAMP 186 87/* Features for GSO (TUNSETOFFLOAD). */88#define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */89#define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */90#define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */91#define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */92#define TUN_F_UFO 0x10 /* I can handle UFO packets */93#define TUN_F_USO4 0x20 /* I can handle USO for IPv4 packets */94#define TUN_F_USO6 0x40 /* I can handle USO for IPv6 packets */95 96/* Protocol info prepended to the packets (when IFF_NO_PI is not set) */97#define TUN_PKT_STRIP 0x000198struct tun_pi {99 __u16 flags;100 __be16 proto;101};102 103/*104 * Filter spec (used for SETXXFILTER ioctls)105 * This stuff is applicable only to the TAP (Ethernet) devices.106 * If the count is zero the filter is disabled and the driver accepts107 * all packets (promisc mode).108 * If the filter is enabled in order to accept broadcast packets109 * broadcast addr must be explicitly included in the addr list.110 */111#define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */112struct tun_filter {113 __u16 flags; /* TUN_FLT_ flags see above */114 __u16 count; /* Number of addresses */115 __u8 addr[][ETH_ALEN];116};117 118#endif /* _UAPI__IF_TUN_H */119