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