]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
uapi/bpf: update kernel header from 4.17-rc1
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 10 Apr 2018 17:48:56 +0000 (10:48 -0700)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 10 Apr 2018 17:48:56 +0000 (10:48 -0700)
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
include/uapi/linux/bpf.h

index 24bd85fc8a5fd2e411ee5e4e6ac53ee4c2c379d9..02b96cba9b6a88819a6ff0920acc367b5704ab91 100644 (file)
@@ -94,6 +94,7 @@ enum bpf_cmd {
        BPF_MAP_GET_FD_BY_ID,
        BPF_OBJ_GET_INFO_BY_FD,
        BPF_PROG_QUERY,
+       BPF_RAW_TRACEPOINT_OPEN,
 };
 
 enum bpf_map_type {
@@ -134,6 +135,8 @@ enum bpf_prog_type {
        BPF_PROG_TYPE_SK_SKB,
        BPF_PROG_TYPE_CGROUP_DEVICE,
        BPF_PROG_TYPE_SK_MSG,
+       BPF_PROG_TYPE_RAW_TRACEPOINT,
+       BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
 };
 
 enum bpf_attach_type {
@@ -145,6 +148,12 @@ enum bpf_attach_type {
        BPF_SK_SKB_STREAM_VERDICT,
        BPF_CGROUP_DEVICE,
        BPF_SK_MSG_VERDICT,
+       BPF_CGROUP_INET4_BIND,
+       BPF_CGROUP_INET6_BIND,
+       BPF_CGROUP_INET4_CONNECT,
+       BPF_CGROUP_INET6_CONNECT,
+       BPF_CGROUP_INET4_POST_BIND,
+       BPF_CGROUP_INET6_POST_BIND,
        __MAX_BPF_ATTACH_TYPE
 };
 
@@ -294,6 +303,11 @@ union bpf_attr {
                __u32           prog_flags;
                char            prog_name[BPF_OBJ_NAME_LEN];
                __u32           prog_ifindex;   /* ifindex of netdev to prep for */
+               /* For some prog types expected attach type must be known at
+                * load time to verify attach type specific parts of prog
+                * (context accesses, allowed helpers, etc).
+                */
+               __u32           expected_attach_type;
        };
 
        struct { /* anonymous struct used by BPF_OBJ_* commands */
@@ -344,6 +358,11 @@ union bpf_attr {
                __aligned_u64   prog_ids;
                __u32           prog_cnt;
        } query;
+
+       struct {
+               __u64 name;
+               __u32 prog_fd;
+       } raw_tracepoint;
 } __attribute__((aligned(8)));
 
 /* BPF helper function descriptions:
@@ -729,6 +748,13 @@ union bpf_attr {
  *     @flags: reserved for future use
  *     Return: SK_PASS
  *
+ * int bpf_bind(ctx, addr, addr_len)
+ *     Bind socket to address. Only binding to IP is supported, no port can be
+ *     set in addr.
+ *     @ctx: pointer to context of type bpf_sock_addr
+ *     @addr: pointer to struct sockaddr to bind socket to
+ *     @addr_len: length of sockaddr structure
+ *     Return: 0 on success or negative error code
  */
 #define __BPF_FUNC_MAPPER(FN)          \
        FN(unspec),                     \
@@ -794,7 +820,8 @@ union bpf_attr {
        FN(msg_redirect_map),           \
        FN(msg_apply_bytes),            \
        FN(msg_cork_bytes),             \
-       FN(msg_pull_data),
+       FN(msg_pull_data),              \
+       FN(bind),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
@@ -923,6 +950,15 @@ struct bpf_sock {
        __u32 protocol;
        __u32 mark;
        __u32 priority;
+       __u32 src_ip4;          /* Allows 1,2,4-byte read.
+                                * Stored in network byte order.
+                                */
+       __u32 src_ip6[4];       /* Allows 1,2,4-byte read.
+                                * Stored in network byte order.
+                                */
+       __u32 src_port;         /* Allows 4-byte read.
+                                * Stored in host byte order
+                                */
 };
 
 #define XDP_PACKET_HEADROOM 256
@@ -998,6 +1034,26 @@ struct bpf_map_info {
        __u64 netns_ino;
 } __attribute__((aligned(8)));
 
+/* User bpf_sock_addr struct to access socket fields and sockaddr struct passed
+ * by user and intended to be used by socket (e.g. to bind to, depends on
+ * attach attach type).
+ */
+struct bpf_sock_addr {
+       __u32 user_family;      /* Allows 4-byte read, but no write. */
+       __u32 user_ip4;         /* Allows 1,2,4-byte read and 4-byte write.
+                                * Stored in network byte order.
+                                */
+       __u32 user_ip6[4];      /* Allows 1,2,4-byte read an 4-byte write.
+                                * Stored in network byte order.
+                                */
+       __u32 user_port;        /* Allows 4-byte read and write.
+                                * Stored in network byte order
+                                */
+       __u32 family;           /* Allows 4-byte read, but no write */
+       __u32 type;             /* Allows 4-byte read, but no write */
+       __u32 protocol;         /* Allows 4-byte read, but no write */
+};
+
 /* User bpf_sock_ops struct to access socket values and specify request ops
  * and their replies.
  * Some of this fields are in network (bigendian) byte order and may need
@@ -1152,4 +1208,8 @@ struct bpf_cgroup_dev_ctx {
        __u32 minor;
 };
 
+struct bpf_raw_tracepoint_args {
+       __u64 args[0];
+};
+
 #endif /* __LINUX_BPF_H__ */