tools/testing/selftests/bpf/prog_tests/sock_addr.c
Source file repositories/reference/linux-study-clean/tools/testing/selftests/bpf/prog_tests/sock_addr.c
File Facts
- System
- Linux kernel
- Corpus path
tools/testing/selftests/bpf/prog_tests/sock_addr.c- Extension
.c- Size
- 57157 bytes
- Lines
- 2661
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
sys/un.htest_progs.hsock_addr_kern.skel.hbind4_prog.skel.hbind6_prog.skel.hconnect_unix_prog.skel.hconnect4_prog.skel.hconnect6_prog.skel.hsendmsg4_prog.skel.hsendmsg6_prog.skel.hrecvmsg4_prog.skel.hrecvmsg6_prog.skel.hsendmsg_unix_prog.skel.hrecvmsg_unix_prog.skel.hgetsockname4_prog.skel.hgetsockname6_prog.skel.hgetsockname_unix_prog.skel.hgetpeername4_prog.skel.hgetpeername6_prog.skel.hgetpeername_unix_prog.skel.hnetwork_helpers.h
Detected Declarations
struct init_sock_argsstruct addr_argsstruct sendmsg_argsstruct sock_opsstruct sock_addr_testenum sock_addr_test_typefunction run_bpf_progfunction kernel_init_sockfunction kernel_close_sockfunction sock_addr_opfunction send_msg_opfunction kernel_connectfunction kernel_bindfunction kernel_listenfunction kernel_sendmsgfunction sock_sendmsgfunction kernel_getsocknamefunction kernel_getpeernamefunction kernel_connect_to_addrfunction kernel_start_serverfunction user_sendmsgfunction user_bindfunction cmp_addrfunction cmp_sock_addrfunction load_sock_addr_kernfunction unload_sock_addr_kernfunction test_bindfunction test_connectfunction test_xmsgfunction test_getsocknamefunction test_getpeernamefunction setup_test_envfunction cleanup_test_envfunction test_sock_addr
Annotated Snippet
struct init_sock_args {
int af;
int type;
};
struct addr_args {
char addr[sizeof(struct sockaddr_storage)];
int addrlen;
};
struct sendmsg_args {
struct addr_args addr;
char msg[10];
int msglen;
};
static struct sock_addr_kern *skel;
static int run_bpf_prog(const char *prog_name, void *ctx, int ctx_size)
{
LIBBPF_OPTS(bpf_test_run_opts, topts);
struct bpf_program *prog;
int prog_fd, err;
topts.ctx_in = ctx;
topts.ctx_size_in = ctx_size;
prog = bpf_object__find_program_by_name(skel->obj, prog_name);
if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name"))
goto err;
prog_fd = bpf_program__fd(prog);
err = bpf_prog_test_run_opts(prog_fd, &topts);
if (!ASSERT_OK(err, prog_name))
goto err;
err = topts.retval;
errno = -topts.retval;
goto out;
err:
err = -1;
out:
return err;
}
static int kernel_init_sock(int af, int type, int protocol)
{
struct init_sock_args args = {
.af = af,
.type = type,
};
return run_bpf_prog("init_sock", &args, sizeof(args));
}
static int kernel_close_sock(int fd)
{
return run_bpf_prog("close_sock", NULL, 0);
}
static int sock_addr_op(const char *name, struct sockaddr *addr,
socklen_t *addrlen, bool expect_change)
{
struct addr_args args;
int err;
if (addrlen)
args.addrlen = *addrlen;
if (addr)
memcpy(&args.addr, addr, *addrlen);
err = run_bpf_prog(name, &args, sizeof(args));
if (!expect_change && addr)
if (!ASSERT_EQ(cmp_addr((struct sockaddr_storage *)addr,
*addrlen,
(struct sockaddr_storage *)&args.addr,
args.addrlen, 1),
0, "address_param_modified"))
return -1;
if (addrlen)
*addrlen = args.addrlen;
if (addr)
memcpy(addr, &args.addr, *addrlen);
return err;
}
Annotation
- Immediate include surface: `sys/un.h`, `test_progs.h`, `sock_addr_kern.skel.h`, `bind4_prog.skel.h`, `bind6_prog.skel.h`, `connect_unix_prog.skel.h`, `connect4_prog.skel.h`, `connect6_prog.skel.h`.
- Detected declarations: `struct init_sock_args`, `struct addr_args`, `struct sendmsg_args`, `struct sock_ops`, `struct sock_addr_test`, `enum sock_addr_test_type`, `function run_bpf_prog`, `function kernel_init_sock`, `function kernel_close_sock`, `function sock_addr_op`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.