tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/bpf/progs/test_tcpbpf_kern.c
Extension
.c
Size
3832 bytes
Lines
155
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.

Dependency Surface

Detected Declarations

Annotated Snippet

if (skops->family == AF_INET6) {
			v = bpf_getsockopt(skops, IPPROTO_TCP, TCP_SAVED_SYN,
					   header, (sizeof(struct ipv6hdr) +
						    sizeof(struct tcphdr)));
			if (!v) {
				int offset = sizeof(struct ipv6hdr);

				thdr = (struct tcphdr *)(header + offset);
				v = thdr->syn;

				global.tcp_saved_syn = v;
			}
		}
		rv = bpf_setsockopt(skops, SOL_TCP, TCP_WINDOW_CLAMP,
				    &window_clamp, sizeof(window_clamp));

		global.window_clamp_server = get_tp_window_clamp(skops);
		break;
	case BPF_SOCK_OPS_RTO_CB:
		break;
	case BPF_SOCK_OPS_RETRANS_CB:
		break;
	case BPF_SOCK_OPS_STATE_CB:
		if (skops->args[1] == BPF_TCP_CLOSE) {
			if (skops->args[0] == BPF_TCP_LISTEN) {
				global.num_listen++;
			} else {
				global.total_retrans = skops->total_retrans;
				global.data_segs_in = skops->data_segs_in;
				global.data_segs_out = skops->data_segs_out;
				global.bytes_received = skops->bytes_received;
				global.bytes_acked = skops->bytes_acked;
			}
			global.num_close_events++;
		}
		break;
	case BPF_SOCK_OPS_TCP_LISTEN_CB:
		bpf_sock_ops_cb_flags_set(skops, BPF_SOCK_OPS_STATE_CB_FLAG);
		v = bpf_setsockopt(skops, IPPROTO_TCP, TCP_SAVE_SYN,
				   &save_syn, sizeof(save_syn));
		/* Update global map w/ result of setsock opt */
		global.tcp_save_syn = v;
		break;
	default:
		rv = -1;
	}
	skops->reply = rv;
	return 1;
}
char _license[] SEC("license") = "GPL";

Annotation

Implementation Notes