On Fri, Feb 21, 2020 at 10:47 AM Martin KaFai Lau <kafai@xxxxxx> wrote: > > 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: Martin KaFai Lau <kafai@xxxxxx> Acked-by: Song Liu <songliubraving@xxxxxx>