From: Cong Wang <xiyou.wangcong@gmail.com>
To: netdev@vger.kernel.org
Cc: bpf@vger.kernel.org, duanxiongchun@bytedance.com,
wangdongdong.6@bytedance.com, jiang.wang@bytedance.com,
Cong Wang <cong.wang@bytedance.com>
Subject: [Patch bpf-next v2 0/9] sockmap: introduce BPF_SK_SKB_VERDICT and support UDP
Date: Mon, 1 Mar 2021 18:37:34 -0800 [thread overview]
Message-ID: <20210302023743.24123-1-xiyou.wangcong@gmail.com> (raw)
From: Cong Wang <cong.wang@bytedance.com>
We have thousands of services connected to a daemon on every host
via AF_UNIX dgram sockets, after they are moved into VM, we have to
add a proxy to forward these communications from VM to host, because
rewriting thousands of them is not practical. This proxy uses an
AF_UNIX socket connected to services and a UDP socket to connect to
the host. It is inefficient because data is copied between kernel
space and user space twice, and we can not use splice() which only
supports TCP. Therefore, we want to use sockmap to do the splicing
without going to user-space at all (after the initial setup).
Currently sockmap only fully supports TCP, UDP is partially supported
as it is only allowed to add into sockmap. This patchset, as the second
part of the original large patchset, extends sockmap with:
1) cross-protocol support with BPF_SK_SKB_VERDICT; 2) full UDP support.
On the high level, ->sendmsg_locked() and ->read_sock() are required
for each protocol to support sockmap redirection, and in order to do
sock proto update, a new ops ->update_proto() is introduced, which is
also required to implement. A BPF ->recvmsg() is also needed to replace
the original ->recvmsg() to retrieve skmsg. Please see each patch for
more details.
To see the big picture, the original patchset is available here:
https://github.com/congwang/linux/tree/sockmap
this patchset is also available:
https://github.com/congwang/linux/tree/sockmap2
---
v2: separate from the original large patchset
rebase to the latest bpf-next
split UDP test case
move inet_csk_has_ulp() check to tcp_bpf.c
clean up udp_read_sock()
Cong Wang (9):
sock_map: introduce BPF_SK_SKB_VERDICT
sock: introduce sk_prot->update_proto()
udp: implement ->sendmsg_locked()
udp: implement ->read_sock() for sockmap
udp: add ->read_sock() and ->sendmsg_locked() to ipv6
skmsg: extract __tcp_bpf_recvmsg() and tcp_bpf_wait_data()
udp: implement udp_bpf_recvmsg() for sockmap
sock_map: update sock type checks for UDP
selftests/bpf: add a test case for udp sockmap
include/linux/skmsg.h | 25 ++--
include/net/ipv6.h | 1 +
include/net/sock.h | 3 +
include/net/tcp.h | 3 +-
include/net/udp.h | 4 +
include/uapi/linux/bpf.h | 1 +
kernel/bpf/syscall.c | 1 +
net/core/skmsg.c | 113 +++++++++++++-
net/core/sock_map.c | 52 ++++---
net/ipv4/af_inet.c | 2 +
net/ipv4/tcp_bpf.c | 129 +++-------------
net/ipv4/tcp_ipv4.c | 3 +
net/ipv4/udp.c | 68 ++++++++-
net/ipv4/udp_bpf.c | 78 +++++++++-
net/ipv6/af_inet6.c | 2 +
net/ipv6/tcp_ipv6.c | 3 +
net/ipv6/udp.c | 30 +++-
net/tls/tls_sw.c | 4 +-
tools/bpf/bpftool/common.c | 1 +
tools/bpf/bpftool/prog.c | 1 +
tools/include/uapi/linux/bpf.h | 1 +
.../selftests/bpf/prog_tests/sockmap_listen.c | 140 ++++++++++++++++++
.../selftests/bpf/progs/test_sockmap_listen.c | 22 +++
23 files changed, 517 insertions(+), 170 deletions(-)
--
2.25.1
next reply other threads:[~2021-03-02 8:49 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-02 2:37 Cong Wang [this message]
2021-03-02 2:37 ` [Patch bpf-next v2 1/9] sock_map: introduce BPF_SK_SKB_VERDICT Cong Wang
2021-03-02 2:37 ` [Patch bpf-next v2 2/9] sock: introduce sk_prot->update_proto() Cong Wang
2021-03-02 16:22 ` Lorenz Bauer
2021-03-02 18:23 ` Cong Wang
2021-03-03 9:35 ` Lorenz Bauer
2021-03-03 18:20 ` Cong Wang
2021-03-04 9:30 ` Lorenz Bauer
2021-03-04 23:52 ` Cong Wang
2021-03-06 0:27 ` John Fastabend
2021-03-06 0:57 ` Cong Wang
2021-03-06 1:55 ` John Fastabend
2021-03-09 17:53 ` Cong Wang
2021-03-10 6:33 ` John Fastabend
2021-03-02 2:37 ` [Patch bpf-next v2 3/9] udp: implement ->sendmsg_locked() Cong Wang
2021-03-02 2:37 ` [Patch bpf-next v2 4/9] udp: implement ->read_sock() for sockmap Cong Wang
2021-03-03 6:26 ` Yonghong Song
2021-03-02 2:37 ` [Patch bpf-next v2 5/9] udp: add ->read_sock() and ->sendmsg_locked() to ipv6 Cong Wang
2021-03-02 16:23 ` Lorenz Bauer
2021-03-02 17:59 ` Cong Wang
2021-03-02 2:37 ` [Patch bpf-next v2 6/9] skmsg: extract __tcp_bpf_recvmsg() and tcp_bpf_wait_data() Cong Wang
2021-03-02 2:37 ` [Patch bpf-next v2 7/9] udp: implement udp_bpf_recvmsg() for sockmap Cong Wang
2021-03-02 2:37 ` [Patch bpf-next v2 8/9] sock_map: update sock type checks for UDP Cong Wang
2021-03-03 6:37 ` Yonghong Song
2021-03-03 18:02 ` Cong Wang
2021-03-03 18:50 ` Yonghong Song
2021-03-02 2:37 ` [Patch bpf-next v2 9/9] selftests/bpf: add a test case for udp sockmap Cong Wang
2021-03-02 16:31 ` Lorenz Bauer
2021-03-02 18:05 ` Cong Wang
2021-03-03 10:20 ` Lorenz Bauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210302023743.24123-1-xiyou.wangcong@gmail.com \
--to=xiyou.wangcong@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=cong.wang@bytedance.com \
--cc=duanxiongchun@bytedance.com \
--cc=jiang.wang@bytedance.com \
--cc=netdev@vger.kernel.org \
--cc=wangdongdong.6@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).