Commit b40de15c authored by yonghong-song's avatar yonghong-song Committed by GitHub

Merge pull request #1661 from qmonnet/kernelfeatures

sync bpf compat headers with latest net-next, update doc for helpers
parents 3ba18008 5ddc64e8
This diff is collapsed.
...@@ -94,6 +94,7 @@ enum bpf_cmd { ...@@ -94,6 +94,7 @@ enum bpf_cmd {
BPF_MAP_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID,
BPF_OBJ_GET_INFO_BY_FD, BPF_OBJ_GET_INFO_BY_FD,
BPF_PROG_QUERY, BPF_PROG_QUERY,
BPF_RAW_TRACEPOINT_OPEN,
}; };
enum bpf_map_type { enum bpf_map_type {
...@@ -134,6 +135,8 @@ enum bpf_prog_type { ...@@ -134,6 +135,8 @@ enum bpf_prog_type {
BPF_PROG_TYPE_SK_SKB, BPF_PROG_TYPE_SK_SKB,
BPF_PROG_TYPE_CGROUP_DEVICE, BPF_PROG_TYPE_CGROUP_DEVICE,
BPF_PROG_TYPE_SK_MSG, BPF_PROG_TYPE_SK_MSG,
BPF_PROG_TYPE_RAW_TRACEPOINT,
BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
}; };
enum bpf_attach_type { enum bpf_attach_type {
...@@ -145,6 +148,12 @@ enum bpf_attach_type { ...@@ -145,6 +148,12 @@ enum bpf_attach_type {
BPF_SK_SKB_STREAM_VERDICT, BPF_SK_SKB_STREAM_VERDICT,
BPF_CGROUP_DEVICE, BPF_CGROUP_DEVICE,
BPF_SK_MSG_VERDICT, 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 __MAX_BPF_ATTACH_TYPE
}; };
...@@ -294,6 +303,11 @@ union bpf_attr { ...@@ -294,6 +303,11 @@ union bpf_attr {
__u32 prog_flags; __u32 prog_flags;
char prog_name[BPF_OBJ_NAME_LEN]; char prog_name[BPF_OBJ_NAME_LEN];
__u32 prog_ifindex; /* ifindex of netdev to prep for */ __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 */ struct { /* anonymous struct used by BPF_OBJ_* commands */
...@@ -344,6 +358,11 @@ union bpf_attr { ...@@ -344,6 +358,11 @@ union bpf_attr {
__aligned_u64 prog_ids; __aligned_u64 prog_ids;
__u32 prog_cnt; __u32 prog_cnt;
} query; } query;
struct {
__u64 name;
__u32 prog_fd;
} raw_tracepoint;
} __attribute__((aligned(8))); } __attribute__((aligned(8)));
/* BPF helper function descriptions: /* BPF helper function descriptions:
...@@ -729,6 +748,13 @@ union bpf_attr { ...@@ -729,6 +748,13 @@ union bpf_attr {
* @flags: reserved for future use * @flags: reserved for future use
* Return: SK_PASS * 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) \ #define __BPF_FUNC_MAPPER(FN) \
FN(unspec), \ FN(unspec), \
...@@ -794,7 +820,8 @@ union bpf_attr { ...@@ -794,7 +820,8 @@ union bpf_attr {
FN(msg_redirect_map), \ FN(msg_redirect_map), \
FN(msg_apply_bytes), \ FN(msg_apply_bytes), \
FN(msg_cork_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 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
* function eBPF program intends to call * function eBPF program intends to call
...@@ -923,6 +950,15 @@ struct bpf_sock { ...@@ -923,6 +950,15 @@ struct bpf_sock {
__u32 protocol; __u32 protocol;
__u32 mark; __u32 mark;
__u32 priority; __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 #define XDP_PACKET_HEADROOM 256
...@@ -998,6 +1034,26 @@ struct bpf_map_info { ...@@ -998,6 +1034,26 @@ struct bpf_map_info {
__u64 netns_ino; __u64 netns_ino;
} __attribute__((aligned(8))); } __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 /* User bpf_sock_ops struct to access socket values and specify request ops
* and their replies. * and their replies.
* Some of this fields are in network (bigendian) byte order and may need * Some of this fields are in network (bigendian) byte order and may need
...@@ -1152,4 +1208,8 @@ struct bpf_cgroup_dev_ctx { ...@@ -1152,4 +1208,8 @@ struct bpf_cgroup_dev_ctx {
__u32 minor; __u32 minor;
}; };
struct bpf_raw_tracepoint_args {
__u64 args[0];
};
#endif /* _UAPI__LINUX_BPF_H__ */ #endif /* _UAPI__LINUX_BPF_H__ */
...@@ -95,6 +95,7 @@ enum bpf_cmd { ...@@ -95,6 +95,7 @@ enum bpf_cmd {
BPF_MAP_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID,
BPF_OBJ_GET_INFO_BY_FD, BPF_OBJ_GET_INFO_BY_FD,
BPF_PROG_QUERY, BPF_PROG_QUERY,
BPF_RAW_TRACEPOINT_OPEN,
}; };
enum bpf_map_type { enum bpf_map_type {
...@@ -135,6 +136,8 @@ enum bpf_prog_type { ...@@ -135,6 +136,8 @@ enum bpf_prog_type {
BPF_PROG_TYPE_SK_SKB, BPF_PROG_TYPE_SK_SKB,
BPF_PROG_TYPE_CGROUP_DEVICE, BPF_PROG_TYPE_CGROUP_DEVICE,
BPF_PROG_TYPE_SK_MSG, BPF_PROG_TYPE_SK_MSG,
BPF_PROG_TYPE_RAW_TRACEPOINT,
BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
}; };
enum bpf_attach_type { enum bpf_attach_type {
...@@ -146,6 +149,12 @@ enum bpf_attach_type { ...@@ -146,6 +149,12 @@ enum bpf_attach_type {
BPF_SK_SKB_STREAM_VERDICT, BPF_SK_SKB_STREAM_VERDICT,
BPF_CGROUP_DEVICE, BPF_CGROUP_DEVICE,
BPF_SK_MSG_VERDICT, 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 __MAX_BPF_ATTACH_TYPE
}; };
...@@ -295,6 +304,11 @@ union bpf_attr { ...@@ -295,6 +304,11 @@ union bpf_attr {
__u32 prog_flags; __u32 prog_flags;
char prog_name[BPF_OBJ_NAME_LEN]; char prog_name[BPF_OBJ_NAME_LEN];
__u32 prog_ifindex; /* ifindex of netdev to prep for */ __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 */ struct { /* anonymous struct used by BPF_OBJ_* commands */
...@@ -345,6 +359,11 @@ union bpf_attr { ...@@ -345,6 +359,11 @@ union bpf_attr {
__aligned_u64 prog_ids; __aligned_u64 prog_ids;
__u32 prog_cnt; __u32 prog_cnt;
} query; } query;
struct {
__u64 name;
__u32 prog_fd;
} raw_tracepoint;
} __attribute__((aligned(8))); } __attribute__((aligned(8)));
/* BPF helper function descriptions: /* BPF helper function descriptions:
...@@ -730,6 +749,13 @@ union bpf_attr { ...@@ -730,6 +749,13 @@ union bpf_attr {
* @flags: reserved for future use * @flags: reserved for future use
* Return: SK_PASS * 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) \ #define __BPF_FUNC_MAPPER(FN) \
FN(unspec), \ FN(unspec), \
...@@ -795,7 +821,8 @@ union bpf_attr { ...@@ -795,7 +821,8 @@ union bpf_attr {
FN(msg_redirect_map), \ FN(msg_redirect_map), \
FN(msg_apply_bytes), \ FN(msg_apply_bytes), \
FN(msg_cork_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 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
* function eBPF program intends to call * function eBPF program intends to call
...@@ -924,6 +951,15 @@ struct bpf_sock { ...@@ -924,6 +951,15 @@ struct bpf_sock {
__u32 protocol; __u32 protocol;
__u32 mark; __u32 mark;
__u32 priority; __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 #define XDP_PACKET_HEADROOM 256
...@@ -999,6 +1035,26 @@ struct bpf_map_info { ...@@ -999,6 +1035,26 @@ struct bpf_map_info {
__u64 netns_ino; __u64 netns_ino;
} __attribute__((aligned(8))); } __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 /* User bpf_sock_ops struct to access socket values and specify request ops
* and their replies. * and their replies.
* Some of this fields are in network (bigendian) byte order and may need * Some of this fields are in network (bigendian) byte order and may need
...@@ -1153,5 +1209,9 @@ struct bpf_cgroup_dev_ctx { ...@@ -1153,5 +1209,9 @@ struct bpf_cgroup_dev_ctx {
__u32 minor; __u32 minor;
}; };
struct bpf_raw_tracepoint_args {
__u64 args[0];
};
#endif /* _UAPI__LINUX_BPF_H__ */ #endif /* _UAPI__LINUX_BPF_H__ */
)********" )********"
...@@ -339,6 +339,8 @@ static int (*bpf_msg_cork_bytes)(void *msg, u32 bytes) = ...@@ -339,6 +339,8 @@ static int (*bpf_msg_cork_bytes)(void *msg, u32 bytes) =
(void *) BPF_FUNC_msg_cork_bytes; (void *) BPF_FUNC_msg_cork_bytes;
static int (*bpf_msg_pull_data)(void *msg, u32 start, u32 end, u64 flags) = static int (*bpf_msg_pull_data)(void *msg, u32 start, u32 end, u64 flags) =
(void *) BPF_FUNC_msg_pull_data; (void *) BPF_FUNC_msg_pull_data;
static int (*bpf_bind)(void *ctx, void *addr, int addr_len) =
(void *) BPF_FUNC_bind;
/* llvm builtin functions that eBPF C program may use to /* llvm builtin functions that eBPF C program may use to
* emit BPF_LD_ABS and BPF_LD_IND instructions * emit BPF_LD_ABS and BPF_LD_IND instructions
......
...@@ -149,10 +149,11 @@ static struct bpf_helper helpers[] = { ...@@ -149,10 +149,11 @@ static struct bpf_helper helpers[] = {
{"getsockopt", "4.15"}, {"getsockopt", "4.15"},
{"override_return", "4.16"}, {"override_return", "4.16"},
{"sock_ops_cb_flags_set", "4.16"}, {"sock_ops_cb_flags_set", "4.16"},
{"msg_redirect_map", "4.16"}, {"msg_redirect_map", "4.17"},
{"msg_apply_bytes", "4.16"}, {"msg_apply_bytes", "4.17"},
{"msg_cork_bytes", "4.16"}, {"msg_cork_bytes", "4.17"},
{"msg_pull_data", "4.16"}, {"msg_pull_data", "4.17"},
{"bind", "4.17"},
}; };
static uint64_t ptr_to_u64(void *ptr) static uint64_t ptr_to_u64(void *ptr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment