• J
    bpf: sockmap, add bpf_msg_apply_bytes() helper · 2a100317
    John Fastabend 提交于
    A single sendmsg or sendfile system call can contain multiple logical
    messages that a BPF program may want to read and apply a verdict. But,
    without an apply_bytes helper any verdict on the data applies to all
    bytes in the sendmsg/sendfile. Alternatively, a BPF program may only
    care to read the first N bytes of a msg. If the payload is large say
    MB or even GB setting up and calling the BPF program repeatedly for
    all bytes, even though the verdict is already known, creates
    unnecessary overhead.
    
    To allow BPF programs to control how many bytes a given verdict
    applies to we implement a bpf_msg_apply_bytes() helper. When called
    from within a BPF program this sets a counter, internal to the
    BPF infrastructure, that applies the last verdict to the next N
    bytes. If the N is smaller than the current data being processed
    from a sendmsg/sendfile call, the first N bytes will be sent and
    the BPF program will be re-run with start_data pointing to the N+1
    byte. If N is larger than the current data being processed the
    BPF verdict will be applied to multiple sendmsg/sendfile calls
    until N bytes are consumed.
    
    Note1 if a socket closes with apply_bytes counter non-zero this
    is not a problem because data is not being buffered for N bytes
    and is sent as its received.
    Signed-off-by: NJohn Fastabend <john.fastabend@gmail.com>
    Acked-by: NDavid S. Miller <davem@davemloft.net>
    Acked-by: NAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
    2a100317
bpf.h 34.6 KB