aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/bpf/bpf.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2017-08-16 01:33:32 -0400
committerDavid S. Miller <davem@davemloft.net>2017-08-16 14:27:53 -0400
commit69e8cc134bcbf0ccfcf852c400b8e6788d1d0038 (patch)
tree181f7fc9d1a8204f93aa705e2725e7c5b766610c /tools/lib/bpf/bpf.c
parent8a31db5615667956c513d205cfb06885c3ec6d0b (diff)
bpf: sockmap sample program
This program binds a program to a cgroup and then matches hard coded IP addresses and adds these to a sockmap. This will receive messages from the backend and send them to the client. client:X <---> frontend:10000 client:X <---> backend:10001 To keep things simple this is only designed for 1:1 connections using hard coded values. A more complete example would allow many backends and clients. To run, # sockmap <cgroup2_dir> Signed-off-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/lib/bpf/bpf.c')
-rw-r--r--tools/lib/bpf/bpf.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index e5bbb090bf88..77660157a684 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -211,20 +211,28 @@ int bpf_obj_get(const char *pathname)
211 return sys_bpf(BPF_OBJ_GET, &attr, sizeof(attr)); 211 return sys_bpf(BPF_OBJ_GET, &attr, sizeof(attr));
212} 212}
213 213
214int bpf_prog_attach(int prog_fd, int target_fd, enum bpf_attach_type type, 214int __bpf_prog_attach(int prog_fd1, int prog_fd2, int target_fd,
215 unsigned int flags) 215 enum bpf_attach_type type,
216 unsigned int flags)
216{ 217{
217 union bpf_attr attr; 218 union bpf_attr attr;
218 219
219 bzero(&attr, sizeof(attr)); 220 bzero(&attr, sizeof(attr));
220 attr.target_fd = target_fd; 221 attr.target_fd = target_fd;
221 attr.attach_bpf_fd = prog_fd; 222 attr.attach_bpf_fd = prog_fd1;
223 attr.attach_bpf_fd2 = prog_fd2;
222 attr.attach_type = type; 224 attr.attach_type = type;
223 attr.attach_flags = flags; 225 attr.attach_flags = flags;
224 226
225 return sys_bpf(BPF_PROG_ATTACH, &attr, sizeof(attr)); 227 return sys_bpf(BPF_PROG_ATTACH, &attr, sizeof(attr));
226} 228}
227 229
230int bpf_prog_attach(int prog_fd, int target_fd, enum bpf_attach_type type,
231 unsigned int flags)
232{
233 return __bpf_prog_attach(prog_fd, 0, target_fd, type, flags);
234}
235
228int bpf_prog_detach(int target_fd, enum bpf_attach_type type) 236int bpf_prog_detach(int target_fd, enum bpf_attach_type type)
229{ 237{
230 union bpf_attr attr; 238 union bpf_attr attr;