summaryrefslogtreecommitdiffhomepage
path: root/src/event/quic/ngx_event_quic_bpf_code.c
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2020-12-25 15:01:15 +0300
committerVladimir Homutov <vl@nginx.com>2020-12-25 15:01:15 +0300
commitc4f31ccca174ff617a594b49ef255354e979b72d (patch)
treed2ade5c91b17e009585c2b329823708e1ce91f76 /src/event/quic/ngx_event_quic_bpf_code.c
parentb20b58ca7d1323664c5e8f91231ade0edf0d0f31 (diff)
downloadnginx-c4f31ccca174ff617a594b49ef255354e979b72d.tar.gz
nginx-c4f31ccca174ff617a594b49ef255354e979b72d.tar.bz2
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.
Diffstat (limited to 'src/event/quic/ngx_event_quic_bpf_code.c')
-rw-r--r--src/event/quic/ngx_event_quic_bpf_code.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/event/quic/ngx_event_quic_bpf_code.c b/src/event/quic/ngx_event_quic_bpf_code.c
new file mode 100644
index 000000000..9cbeb3432
--- /dev/null
+++ b/src/event/quic/ngx_event_quic_bpf_code.c
@@ -0,0 +1,90 @@
+/* AUTO-GENERATED, DO NOT EDIT. */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "ngx_bpf.h"
+
+
+static ngx_bpf_reloc_t bpf_reloc_prog_ngx_quic_reuseport_helper[] = {
+ { "ngx_quic_sockmap", 56 },
+};
+
+static struct bpf_insn bpf_insn_prog_ngx_quic_reuseport_helper[] = {
+ /* opcode dst src offset imm */
+ { 0x79, BPF_REG_4, BPF_REG_1, (int16_t) 0, 0x0 },
+ { 0x79, BPF_REG_3, BPF_REG_1, (int16_t) 8, 0x0 },
+ { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x8 },
+ { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 55, 0x0 },
+ { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x9 },
+ { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 52, 0x0 },
+ { 0xb7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x14 },
+ { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x9 },
+ { 0x71, BPF_REG_6, BPF_REG_2, (int16_t) 0, 0x0 },
+ { 0x67, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 },
+ { 0xc7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x38 },
+ { 0x65, BPF_REG_6, BPF_REG_0, (int16_t) 10, 0xffffffff },
+ { 0xbf, BPF_REG_2, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0xd },
+ { 0x2d, BPF_REG_2, BPF_REG_3, (int16_t) 43, 0x0 },
+ { 0xbf, BPF_REG_5, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0xe },
+ { 0x2d, BPF_REG_5, BPF_REG_3, (int16_t) 40, 0x0 },
+ { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0xe },
+ { 0x71, BPF_REG_5, BPF_REG_4, (int16_t) 12, 0x0 },
+ { 0xb7, BPF_REG_6, BPF_REG_0, (int16_t) 0, 0x8 },
+ { 0x2d, BPF_REG_6, BPF_REG_5, (int16_t) 36, 0x0 },
+ { 0xf, BPF_REG_5, BPF_REG_0, (int16_t) 0, 0x0 },
+ { 0xf, BPF_REG_4, BPF_REG_5, (int16_t) 0, 0x0 },
+ { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 33, 0x0 },
+ { 0xbf, BPF_REG_4, BPF_REG_2, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x9 },
+ { 0x2d, BPF_REG_4, BPF_REG_3, (int16_t) 30, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 1, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x38 },
+ { 0x71, BPF_REG_3, BPF_REG_2, (int16_t) 2, 0x0 },
+ { 0x67, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0x30 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 3, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x28 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 4, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x20 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 5, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x38 },
+ { 0xc7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x20 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 6, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x10 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_4, BPF_REG_2, (int16_t) 7, 0x0 },
+ { 0x67, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x8 },
+ { 0x4f, BPF_REG_3, BPF_REG_4, (int16_t) 0, 0x0 },
+ { 0x71, BPF_REG_2, BPF_REG_2, (int16_t) 8, 0x0 },
+ { 0x4f, BPF_REG_3, BPF_REG_2, (int16_t) 0, 0x0 },
+ { 0x7b, BPF_REG_10, BPF_REG_3, (int16_t) 65528, 0x0 },
+ { 0xbf, BPF_REG_3, BPF_REG_10, (int16_t) 0, 0x0 },
+ { 0x7, BPF_REG_3, BPF_REG_0, (int16_t) 0, 0xfffffff8 },
+ { 0x18, BPF_REG_2, BPF_REG_0, (int16_t) 0, 0x0 },
+ { 0x0, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 },
+ { 0xb7, BPF_REG_4, BPF_REG_0, (int16_t) 0, 0x0 },
+ { 0x85, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x52 },
+ { 0xb7, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x1 },
+ { 0x95, BPF_REG_0, BPF_REG_0, (int16_t) 0, 0x0 },
+};
+
+
+ngx_bpf_program_t ngx_quic_reuseport_helper = {
+ .relocs = bpf_reloc_prog_ngx_quic_reuseport_helper,
+ .nrelocs = sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper)
+ / sizeof(bpf_reloc_prog_ngx_quic_reuseport_helper[0]),
+ .ins = bpf_insn_prog_ngx_quic_reuseport_helper,
+ .nins = sizeof(bpf_insn_prog_ngx_quic_reuseport_helper)
+ / sizeof(bpf_insn_prog_ngx_quic_reuseport_helper[0]),
+ .license = "BSD",
+ .type = BPF_PROG_TYPE_SK_REUSEPORT,
+};
+