• Martin KaFai Lau's avatar
    bpf: INET_DIAG support in bpf_sk_storage · 1ed4d924
    Martin KaFai Lau authored
    This patch adds INET_DIAG support to bpf_sk_storage.
    
    1. Although this series adds bpf_sk_storage diag capability to inet sk,
       bpf_sk_storage is in general applicable to all fullsock.  Hence, the
       bpf_sk_storage logic will operate on SK_DIAG_* nlattr.  The caller
       will pass in its specific nesting nlattr (e.g. INET_DIAG_*) as
       the argument.
    
    2. The request will be like:
    	INET_DIAG_REQ_SK_BPF_STORAGES (nla_nest) (defined in latter patch)
    		SK_DIAG_BPF_STORAGE_REQ_MAP_FD (nla_put_u32)
    		SK_DIAG_BPF_STORAGE_REQ_MAP_FD (nla_put_u32)
    		......
    
       Considering there could have multiple bpf_sk_storages in a sk,
       instead of reusing INET_DIAG_INFO ("ss -i"),  the user can select
       some specific bpf_sk_storage to dump by specifying an array of
       SK_DIAG_BPF_STORAGE_REQ_MAP_FD.
    
       If no SK_DIAG_BPF_STORAGE_REQ_MAP_FD is specified (i.e. an empty
       INET_DIAG_REQ_SK_BPF_STORAGES), it will dump all bpf_sk_storages
       of a sk.
    
    3. The reply will be like:
    	INET_DIAG_BPF_SK_STORAGES (nla_nest) (defined in latter patch)
    		SK_DIAG_BPF_STORAGE (nla_nest)
    			SK_DIAG_BPF_STORAGE_MAP_ID (nla_put_u32)
    			SK_DIAG_BPF_STORAGE_MAP_VALUE (nla_reserve_64bit)
    		SK_DIAG_BPF_STORAGE (nla_nest)
    			SK_DIAG_BPF_STORAGE_MAP_ID (nla_put_u32)
    			SK_DIAG_BPF_STORAGE_MAP_VALUE (nla_reserve_64bit)
    		......
    
    4. Unlike other INET_DIAG info of a sk which is pretty static, the size
       required to dump the bpf_sk_storage(s) of a sk is dynamic as the
       system adding more bpf_sk_storage_map.  It is hard to set a static
       min_dump_alloc size.
    
       Hence, this series learns it at the runtime and adjust the
       cb->min_dump_alloc as it iterates all sk(s) of a system.  The
       "unsigned int *res_diag_size" in bpf_sk_storage_diag_put()
       is for this purpose.
    
       The next patch will update the cb->min_dump_alloc as it
       iterates the sk(s).
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarSong Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20200225230421.1975729-1-kafai@fb.com
    1ed4d924
syscall.c 80.4 KB