Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says: ==================== pull-request: bpf-next 2019-05-31 The following pull-request contains BPF updates for your *net-next* tree. Lots of exciting new features in the first PR of this developement cycle! The main changes are: 1) misc verifier improvements, from Alexei. 2) bpftool can now convert btf to valid C, from Andrii. 3) verifier can insert explicit ZEXT insn when requested by 32-bit JITs. This feature greatly improves BPF speed on 32-bit architectures. From Jiong. 4) cgroups will now auto-detach bpf programs. This fixes issue of thousands bpf programs got stuck in dying cgroups. From Roman. 5) new bpf_send_signal() helper, from Yonghong. 6) cgroup inet skb programs can signal CN to the stack, from Lawrence. 7) miscellaneous cleanups, from many developers. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -260,6 +260,24 @@ enum bpf_attach_type {
|
||||
*/
|
||||
#define BPF_F_ANY_ALIGNMENT (1U << 1)
|
||||
|
||||
/* BPF_F_TEST_RND_HI32 is used in BPF_PROG_LOAD command for testing purpose.
|
||||
* Verifier does sub-register def/use analysis and identifies instructions whose
|
||||
* def only matters for low 32-bit, high 32-bit is never referenced later
|
||||
* through implicit zero extension. Therefore verifier notifies JIT back-ends
|
||||
* that it is safe to ignore clearing high 32-bit for these instructions. This
|
||||
* saves some back-ends a lot of code-gen. However such optimization is not
|
||||
* necessary on some arches, for example x86_64, arm64 etc, whose JIT back-ends
|
||||
* hence hasn't used verifier's analysis result. But, we really want to have a
|
||||
* way to be able to verify the correctness of the described optimization on
|
||||
* x86_64 on which testsuites are frequently exercised.
|
||||
*
|
||||
* So, this flag is introduced. Once it is set, verifier will randomize high
|
||||
* 32-bit for those instructions who has been identified as safe to ignore them.
|
||||
* Then, if verifier is not doing correct analysis, such randomization will
|
||||
* regress tests to expose bugs.
|
||||
*/
|
||||
#define BPF_F_TEST_RND_HI32 (1U << 2)
|
||||
|
||||
/* When BPF ldimm64's insn[0].src_reg != 0 then this can have
|
||||
* two extensions:
|
||||
*
|
||||
@@ -2672,6 +2690,20 @@ union bpf_attr {
|
||||
* 0 on success.
|
||||
*
|
||||
* **-ENOENT** if the bpf-local-storage cannot be found.
|
||||
*
|
||||
* int bpf_send_signal(u32 sig)
|
||||
* Description
|
||||
* Send signal *sig* to the current task.
|
||||
* Return
|
||||
* 0 on success or successfully queued.
|
||||
*
|
||||
* **-EBUSY** if work queue under nmi is full.
|
||||
*
|
||||
* **-EINVAL** if *sig* is invalid.
|
||||
*
|
||||
* **-EPERM** if no permission to send the *sig*.
|
||||
*
|
||||
* **-EAGAIN** if bpf program can try again.
|
||||
*/
|
||||
#define __BPF_FUNC_MAPPER(FN) \
|
||||
FN(unspec), \
|
||||
@@ -2782,7 +2814,8 @@ union bpf_attr {
|
||||
FN(strtol), \
|
||||
FN(strtoul), \
|
||||
FN(sk_storage_get), \
|
||||
FN(sk_storage_delete),
|
||||
FN(sk_storage_delete), \
|
||||
FN(send_signal),
|
||||
|
||||
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
|
||||
* function eBPF program intends to call
|
||||
|
||||
114
tools/include/uapi/linux/if_tun.h
Normal file
114
tools/include/uapi/linux/if_tun.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
||||
/*
|
||||
* Universal TUN/TAP device driver.
|
||||
* Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _UAPI__IF_TUN_H
|
||||
#define _UAPI__IF_TUN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/filter.h>
|
||||
|
||||
/* Read queue size */
|
||||
#define TUN_READQ_SIZE 500
|
||||
/* TUN device type flags: deprecated. Use IFF_TUN/IFF_TAP instead. */
|
||||
#define TUN_TUN_DEV IFF_TUN
|
||||
#define TUN_TAP_DEV IFF_TAP
|
||||
#define TUN_TYPE_MASK 0x000f
|
||||
|
||||
/* Ioctl defines */
|
||||
#define TUNSETNOCSUM _IOW('T', 200, int)
|
||||
#define TUNSETDEBUG _IOW('T', 201, int)
|
||||
#define TUNSETIFF _IOW('T', 202, int)
|
||||
#define TUNSETPERSIST _IOW('T', 203, int)
|
||||
#define TUNSETOWNER _IOW('T', 204, int)
|
||||
#define TUNSETLINK _IOW('T', 205, int)
|
||||
#define TUNSETGROUP _IOW('T', 206, int)
|
||||
#define TUNGETFEATURES _IOR('T', 207, unsigned int)
|
||||
#define TUNSETOFFLOAD _IOW('T', 208, unsigned int)
|
||||
#define TUNSETTXFILTER _IOW('T', 209, unsigned int)
|
||||
#define TUNGETIFF _IOR('T', 210, unsigned int)
|
||||
#define TUNGETSNDBUF _IOR('T', 211, int)
|
||||
#define TUNSETSNDBUF _IOW('T', 212, int)
|
||||
#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog)
|
||||
#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
|
||||
#define TUNGETVNETHDRSZ _IOR('T', 215, int)
|
||||
#define TUNSETVNETHDRSZ _IOW('T', 216, int)
|
||||
#define TUNSETQUEUE _IOW('T', 217, int)
|
||||
#define TUNSETIFINDEX _IOW('T', 218, unsigned int)
|
||||
#define TUNGETFILTER _IOR('T', 219, struct sock_fprog)
|
||||
#define TUNSETVNETLE _IOW('T', 220, int)
|
||||
#define TUNGETVNETLE _IOR('T', 221, int)
|
||||
/* The TUNSETVNETBE and TUNGETVNETBE ioctls are for cross-endian support on
|
||||
* little-endian hosts. Not all kernel configurations support them, but all
|
||||
* configurations that support SET also support GET.
|
||||
*/
|
||||
#define TUNSETVNETBE _IOW('T', 222, int)
|
||||
#define TUNGETVNETBE _IOR('T', 223, int)
|
||||
#define TUNSETSTEERINGEBPF _IOR('T', 224, int)
|
||||
#define TUNSETFILTEREBPF _IOR('T', 225, int)
|
||||
#define TUNSETCARRIER _IOW('T', 226, int)
|
||||
#define TUNGETDEVNETNS _IO('T', 227)
|
||||
|
||||
/* TUNSETIFF ifr flags */
|
||||
#define IFF_TUN 0x0001
|
||||
#define IFF_TAP 0x0002
|
||||
#define IFF_NAPI 0x0010
|
||||
#define IFF_NAPI_FRAGS 0x0020
|
||||
#define IFF_NO_PI 0x1000
|
||||
/* This flag has no real effect */
|
||||
#define IFF_ONE_QUEUE 0x2000
|
||||
#define IFF_VNET_HDR 0x4000
|
||||
#define IFF_TUN_EXCL 0x8000
|
||||
#define IFF_MULTI_QUEUE 0x0100
|
||||
#define IFF_ATTACH_QUEUE 0x0200
|
||||
#define IFF_DETACH_QUEUE 0x0400
|
||||
/* read-only flag */
|
||||
#define IFF_PERSIST 0x0800
|
||||
#define IFF_NOFILTER 0x1000
|
||||
|
||||
/* Socket options */
|
||||
#define TUN_TX_TIMESTAMP 1
|
||||
|
||||
/* Features for GSO (TUNSETOFFLOAD). */
|
||||
#define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */
|
||||
#define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */
|
||||
#define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */
|
||||
#define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */
|
||||
#define TUN_F_UFO 0x10 /* I can handle UFO packets */
|
||||
|
||||
/* Protocol info prepended to the packets (when IFF_NO_PI is not set) */
|
||||
#define TUN_PKT_STRIP 0x0001
|
||||
struct tun_pi {
|
||||
__u16 flags;
|
||||
__be16 proto;
|
||||
};
|
||||
|
||||
/*
|
||||
* Filter spec (used for SETXXFILTER ioctls)
|
||||
* This stuff is applicable only to the TAP (Ethernet) devices.
|
||||
* If the count is zero the filter is disabled and the driver accepts
|
||||
* all packets (promisc mode).
|
||||
* If the filter is enabled in order to accept broadcast packets
|
||||
* broadcast addr must be explicitly included in the addr list.
|
||||
*/
|
||||
#define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */
|
||||
struct tun_filter {
|
||||
__u16 flags; /* TUN_FLT_ flags see above */
|
||||
__u16 count; /* Number of addresses */
|
||||
__u8 addr[0][ETH_ALEN];
|
||||
};
|
||||
|
||||
#endif /* _UAPI__IF_TUN_H */
|
||||
Reference in New Issue
Block a user