// net/ipv4/inet_hashtables.cstruct sock*__inet_lookup_listener(struct net*net,struct inet_hashinfo*hashinfo,struct sk_buff*skb,int doff,const__be32 saddr,__be16 sport,const__be32 daddr,constunsigned short hnum,constint dif,constint sdif){struct inet_listen_hashbucket*ilb2;struct soc...
BPF_PROG_TYPE_SK_SKB : BPF_FUNC_skb_store_bytes() BPF_FUNC_skb_load_bytes() BPF_FUNC_skb_pull_data() BPF_FUNC_skb_change_tail() BPF_FUNC_skb_change_head() BPF_FUNC_get_socket_cookie() BPF_FUNC_get_socket_uid() BPF_FUNC_sk_redirect_map() BPF_FUNC_sk_redirect_hash() BPF_FUNC...
BPF_MAP_TYPE_SOCKHASH, BPF_MAP_TYPE_CGROUP_STORAGE, BPF_MAP_TYPE_REUSEPORT_SOCKARRAY, BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE, BPF_MAP_TYPE_QUEUE, BPF_MAP_TYPE_STACK, BPF_MAP_TYPE_SK_STORAGE, BPF_MAP_TYPE_DEVMAP_HASH, BPF_MAP_TYPE_STRUCT_OPS, BPF_MAP_TYPE_RINGBUF, BPF_MAP_TYPE_INODE...
bpf_msg_redirect_map, bpf_msg_apply_bytes、bpf_msg_cork_bytes、bpf_msg_pull_data, bpf_msg_redirect_hash, bpf_get_current_cgroup_id, bpf_map_push_elem, bpf_map_pop_elem, bpf_map_peek_elem, bpf_msg_push_data, bpf_msg_pop_data, bpf_spin_lock, bpf_spin_unlock, bpf_sk_st...
{ struct inet_listen_hashbucket *ilb2; struct sock *result = NULL; unsigned int hash2; // 如果这里 attach 了 BPF 程序,直接让 BPF 程序来选择 socket /* Lookup redirect from BPF */ if (static_branch_unlikely(&bpf_sk_lookup_enabled)) { result = inet_lookup_run_bpf(net, hashinfo, ...
func_id!=BPF_FUNC_msg_redirect_hash) 21672168 gotoerror; 21682169 break; 2170+ caseBPF_MAP_TYPE_REUSEPORT_SOCKARRAY: 2171+ if(func_id!=BPF_FUNC_sk_select_reuseport) 2172+ gotoerror; 2173+ break; 21692174 default: 21702175 break;
static inline enum tcx_action_base tcx_action_code(struct sk_buff *skb, int code) { switch (code) { case TCX_PASS: skb->tc_index = qdisc_skb_cb(skb)->tc_classid; fallthrough; case TCX_DROP: case TCX_REDIRECT: return code; case TCX_NEXT: default: return TCX_NEXT; } } #endif...
例如,BPF_MAP_TYPE_PROG_ARRAY是保存其他BPF程序的map数组,BPF_MAP_TYPE_ARRAY_OF_MAPS和BPF_MAP_TYPE_HASH_OF_MAPS都保存指向其他map的指针,所有的BPF map会在运行时自动的替换。这些类型的映射解决了一个不适合仅通过BPF helper function实现的特定问题,因为需要用保持额外(非数据)状态在跨BPF程序调时。
bpf_skb_get_tunnel_key, bpf_skb_set_tunnel_key, bpf_skb_get_tunnel_opt, bpf_skb_set_tunnel_opt, bpf_redirect, bpf_clone_redirect, bpf_skb_change_tail, bpf_skb_change_head, bpf_skb_store_bytes, bpf_csum_update, bpf_l3_csum_replace, bpf_l4_csum_replace, bpf_set_hash_invalid are ...
/ include / uapi / linux / bpf.h v6 v5 v4 v4.20 v4.19 v4.18 v4.17 v4.16 v4.15 v4.15.18 v4.15.17 v4.15.16 v4.15.15 v4.15.14 v4.15.13 v4.15.12 v4.15.11 v4.15.10 v4.15.9 v4.15.8 v4.15.7 v4.15.6 v4.15.5 v4.15.4 v4.15.3 v4.15.2 v...