tools/testing/selftests/net/tcp_port_share.c
Source file repositories/reference/linux-study-clean/tools/testing/selftests/net/tcp_port_share.c
File Facts
- System
- Linux kernel
- Corpus path
tools/testing/selftests/net/tcp_port_share.c- Extension
.c- Size
- 7847 bytes
- Lines
- 259
- 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
arpa/inet.hnet/if.hsys/ioctl.hfcntl.hsched.hstdlib.hkselftest_harness.h
Detected Declarations
struct sockaddr_inetfunction disconnectfunction getsockname_portfunction make_inet_addrfunction disconnect
Annotated Snippet
struct sockaddr_inet {
union {
struct sockaddr_storage ss;
struct sockaddr_in6 v6;
struct sockaddr_in v4;
struct sockaddr sa;
};
socklen_t len;
char str[INET6_ADDRSTRLEN + __builtin_strlen("[]:65535") + 1];
};
const int one = 1;
static int disconnect(int fd)
{
return connect(fd, &(struct sockaddr){ AF_UNSPEC }, sizeof(struct sockaddr));
}
static int getsockname_port(int fd)
{
struct sockaddr_inet addr = {};
int err;
addr.len = sizeof(addr);
err = getsockname(fd, &addr.sa, &addr.len);
if (err)
return -1;
switch (addr.sa.sa_family) {
case AF_INET:
return ntohs(addr.v4.sin_port);
case AF_INET6:
return ntohs(addr.v6.sin6_port);
default:
errno = EAFNOSUPPORT;
return -1;
}
}
static void make_inet_addr(int af, const char *ip, __u16 port,
struct sockaddr_inet *addr)
{
const char *fmt = "";
memset(addr, 0, sizeof(*addr));
switch (af) {
case AF_INET:
addr->len = sizeof(addr->v4);
addr->v4.sin_family = af;
addr->v4.sin_port = htons(port);
inet_pton(af, ip, &addr->v4.sin_addr);
fmt = "%s:%hu";
break;
case AF_INET6:
addr->len = sizeof(addr->v6);
addr->v6.sin6_family = af;
addr->v6.sin6_port = htons(port);
inet_pton(af, ip, &addr->v6.sin6_addr);
fmt = "[%s]:%hu";
break;
}
snprintf(addr->str, sizeof(addr->str), fmt, ip, port);
}
FIXTURE(tcp_port_share) {};
FIXTURE_VARIANT(tcp_port_share) {
int domain;
/* IP to listen on and connect to */
const char *dst_ip;
/* Primary IP to connect from */
const char *src1_ip;
/* Secondary IP to connect from */
const char *src2_ip;
/* IP to bind to in order to block the source port */
const char *bind_ip;
};
FIXTURE_VARIANT_ADD(tcp_port_share, ipv4) {
.domain = AF_INET,
.dst_ip = "127.0.0.1",
.src1_ip = "127.1.1.1",
.src2_ip = "127.2.2.2",
.bind_ip = "127.3.3.3",
};
FIXTURE_VARIANT_ADD(tcp_port_share, ipv6) {
.domain = AF_INET6,
Annotation
- Immediate include surface: `arpa/inet.h`, `net/if.h`, `sys/ioctl.h`, `fcntl.h`, `sched.h`, `stdlib.h`, `kselftest_harness.h`.
- Detected declarations: `struct sockaddr_inet`, `function disconnect`, `function getsockname_port`, `function make_inet_addr`, `function disconnect`.
- 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.