annotate src/event/quic/ngx_event_quic_bpf_code.c @ 8676:7df607cb2d11 quic

QUIC: ngx_quic_bpf module. The quic kernel bpf helper inspects packet payload for DCID, extracts key and routes the packet into socket matching the key. Due to reuseport feature, each worker owns a personal socket, which is identified by the same key, used to create DCID. BPF objects are locked in RAM and are subject to RLIMIT_MEMLOCK. The "ulimit -l" command may be used to setup proper limits, if maps cannot be created with EPERM or updated with ETOOLONG.
author Vladimir Homutov <vl@nginx.com>
date Fri, 25 Dec 2020 15:01:15 +0300
parents
children 85e60c064728
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8676
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1 /* AUTO-GENERATED, DO NOT EDIT. */
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 #include <stddef.h>
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 #include <stdint.h>
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6 #include "ngx_bpf.h"
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 static ngx_bpf_reloc_t bpf_reloc_prog_ngx_quic_reuseport_helper[] = {
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10 { "ngx_quic_sockmap", 56 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11 };
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13 static struct bpf_insn bpf_insn_prog_ngx_quic_reuseport_helper[] = {
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14 /* opcode dst src offset imm */
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15 { 0x79, BPF_REG_4, BPF_REG_1, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16 { 0x79, BPF_REG_3, BPF_REG_1, (int16_t) 8, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17 { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18 { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x8 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19 { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 55, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20 { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
21 { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x9 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22 { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 52, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23 { 0xb7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x14 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x9 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 { 0x71, BPF_REG_6, BPF_REG_2, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 { 0x67, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 { 0xc7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 { 0x65, BPF_REG_6, BPF_REG_0, (int16_t) 10, 0xffffffff },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0xd },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 43, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33 { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0xe },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34 { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 40, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35 { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0xe },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36 { 0x71, BPF_REG_5, BPF_REG_4, (int16_t) 12, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 { 0xb7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x8 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38 { 0x2d, BPF_REG_6, BPF_REG_5, (int16_t) 36, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39 { 0xf, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40 { 0xf, BPF_REG_4, BPF_REG_5, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41 { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 33, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42 { 0xbf, BPF_REG_4, BPF_REG_2, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43 { 0x7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x9 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
44 { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 30, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
45 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 1, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x38 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47 { 0x71, BPF_REG_3, BPF_REG_2, (int16_t) 2, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
48 { 0x67, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0x30 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
49 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 3, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x28 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 4, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x20 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
55 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
56 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 5, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
57 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x38 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
58 { 0xc7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x20 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
59 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 6, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x10 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63 { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 7, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
64 { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x8 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65 { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 { 0x71, BPF_REG_2, BPF_REG_2, (int16_t) 8, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 { 0x4f, BPF_REG_3, BPF_REG_2, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 { 0x7b, BPF_REG_10, BPF_REG_3, (int16_t) 65528, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69 { 0xbf, BPF_REG_3, BPF_REG_10, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70 { 0x7, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0xfffffff8 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
71 { 0x18, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72 { 0x0, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73 { 0xb7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74 { 0x85, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x52 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
75 { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x1 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
76 { 0x95, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 },
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
77 };
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
78
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
79
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
80 ngx_bpf_program_t ngx_quic_reuseport_helper = {
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
81 .relocs = bpf_reloc_prog_ngx_quic_reuseport_helper,
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 .nrelocs = sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper)
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
83 / sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper[0]),
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
84 .ins = bpf_insn_prog_ngx_quic_reuseport_helper,
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 .nins = sizeof(bpf_insn_prog_ngx_quic_reuseport_helper)
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
86 / sizeof(bpf_insn_prog_ngx_quic_reuseport_helper[0]),
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
87 .license = "BSD",
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88 .type = BPF_PROG_TYPE_SK_REUSEPORT,
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89 };
7df607cb2d11 QUIC: ngx_quic_bpf module.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90