162306a36Sopenharmony_ci/* instructions used to output a skb based software event, produced 262306a36Sopenharmony_ci * from code snippet: 362306a36Sopenharmony_ci * struct TMP { 462306a36Sopenharmony_ci * uint64_t tmp; 562306a36Sopenharmony_ci * } tt; 662306a36Sopenharmony_ci * tt.tmp = 5; 762306a36Sopenharmony_ci * bpf_perf_event_output(skb, &connection_tracking_event_map, 0, 862306a36Sopenharmony_ci * &tt, sizeof(tt)); 962306a36Sopenharmony_ci * return 1; 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * the bpf assembly from llvm is: 1262306a36Sopenharmony_ci * 0: b7 02 00 00 05 00 00 00 r2 = 5 1362306a36Sopenharmony_ci * 1: 7b 2a f8 ff 00 00 00 00 *(u64 *)(r10 - 8) = r2 1462306a36Sopenharmony_ci * 2: bf a4 00 00 00 00 00 00 r4 = r10 1562306a36Sopenharmony_ci * 3: 07 04 00 00 f8 ff ff ff r4 += -8 1662306a36Sopenharmony_ci * 4: 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r2 = 0ll 1762306a36Sopenharmony_ci * 6: b7 03 00 00 00 00 00 00 r3 = 0 1862306a36Sopenharmony_ci * 7: b7 05 00 00 08 00 00 00 r5 = 8 1962306a36Sopenharmony_ci * 8: 85 00 00 00 19 00 00 00 call 25 2062306a36Sopenharmony_ci * 9: b7 00 00 00 01 00 00 00 r0 = 1 2162306a36Sopenharmony_ci * 10: 95 00 00 00 00 00 00 00 exit 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * The reason I put the code here instead of fill_helpers is that map fixup 2462306a36Sopenharmony_ci * is against the insns, instead of filled prog. 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define __PERF_EVENT_INSNS__ \ 2862306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_2, 5), \ 2962306a36Sopenharmony_ci BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -8), \ 3062306a36Sopenharmony_ci BPF_MOV64_REG(BPF_REG_4, BPF_REG_10), \ 3162306a36Sopenharmony_ci BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, -8), \ 3262306a36Sopenharmony_ci BPF_LD_MAP_FD(BPF_REG_2, 0), \ 3362306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_3, 0), \ 3462306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_5, 8), \ 3562306a36Sopenharmony_ci BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, \ 3662306a36Sopenharmony_ci BPF_FUNC_perf_event_output), \ 3762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), \ 3862306a36Sopenharmony_ci BPF_EXIT_INSN(), 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci "perfevent for sockops", 4162306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 4262306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCK_OPS, 4362306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 4462306a36Sopenharmony_ci .result = ACCEPT, 4562306a36Sopenharmony_ci .retval = 1, 4662306a36Sopenharmony_ci}, 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci "perfevent for tc", 4962306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 5062306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SCHED_CLS, 5162306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 5262306a36Sopenharmony_ci .result = ACCEPT, 5362306a36Sopenharmony_ci .retval = 1, 5462306a36Sopenharmony_ci}, 5562306a36Sopenharmony_ci{ 5662306a36Sopenharmony_ci "perfevent for lwt out", 5762306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 5862306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_LWT_OUT, 5962306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 6062306a36Sopenharmony_ci .result = ACCEPT, 6162306a36Sopenharmony_ci .retval = 1, 6262306a36Sopenharmony_ci}, 6362306a36Sopenharmony_ci{ 6462306a36Sopenharmony_ci "perfevent for xdp", 6562306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 6662306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_XDP, 6762306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 6862306a36Sopenharmony_ci .result = ACCEPT, 6962306a36Sopenharmony_ci .retval = 1, 7062306a36Sopenharmony_ci}, 7162306a36Sopenharmony_ci{ 7262306a36Sopenharmony_ci "perfevent for socket filter", 7362306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 7462306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SOCKET_FILTER, 7562306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 7662306a36Sopenharmony_ci .result = ACCEPT, 7762306a36Sopenharmony_ci .retval = 1, 7862306a36Sopenharmony_ci}, 7962306a36Sopenharmony_ci{ 8062306a36Sopenharmony_ci "perfevent for sk_skb", 8162306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 8262306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_SK_SKB, 8362306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 8462306a36Sopenharmony_ci .result = ACCEPT, 8562306a36Sopenharmony_ci .retval = 1, 8662306a36Sopenharmony_ci}, 8762306a36Sopenharmony_ci{ 8862306a36Sopenharmony_ci "perfevent for cgroup skb", 8962306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 9062306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 9162306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 9262306a36Sopenharmony_ci .result = ACCEPT, 9362306a36Sopenharmony_ci .retval = 1, 9462306a36Sopenharmony_ci}, 9562306a36Sopenharmony_ci{ 9662306a36Sopenharmony_ci "perfevent for cgroup dev", 9762306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 9862306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_DEVICE, 9962306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 10062306a36Sopenharmony_ci .result = ACCEPT, 10162306a36Sopenharmony_ci .retval = 1, 10262306a36Sopenharmony_ci}, 10362306a36Sopenharmony_ci{ 10462306a36Sopenharmony_ci "perfevent for cgroup sysctl", 10562306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 10662306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SYSCTL, 10762306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 10862306a36Sopenharmony_ci .result = ACCEPT, 10962306a36Sopenharmony_ci .retval = 1, 11062306a36Sopenharmony_ci}, 11162306a36Sopenharmony_ci{ 11262306a36Sopenharmony_ci "perfevent for cgroup sockopt", 11362306a36Sopenharmony_ci .insns = { __PERF_EVENT_INSNS__ }, 11462306a36Sopenharmony_ci .prog_type = BPF_PROG_TYPE_CGROUP_SOCKOPT, 11562306a36Sopenharmony_ci .expected_attach_type = BPF_CGROUP_SETSOCKOPT, 11662306a36Sopenharmony_ci .fixup_map_event_output = { 4 }, 11762306a36Sopenharmony_ci .result = ACCEPT, 11862306a36Sopenharmony_ci .retval = 1, 11962306a36Sopenharmony_ci}, 120