函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\bpf\arraymap.c Create Date:2022-07-27 14:27:19
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:mit BPF instructions equivalent to C code of array_map_lookup_elem()

函数原型:static u32 array_map_gen_lookup(struct bpf_map *map, struct bpf_insn *insn_buf)

返回类型:u32

参数:

类型参数名称
struct bpf_map *map
struct bpf_insn *insn_buf
213  array等于container_of - cast a member of a structure out to the containing structure*@ptr: the pointer to the member.*@type: the type of the container struct this is embedded in.*@member: the name of the member within the struct.(map, structbpf_array, map)
214  insn等于insn_buf
215  elem_size等于und_up - round up to next specified power of 2*@x: the value to round*@y: multiple to round up to (must be a power of 2)* Rounds @x up to next multiple of @y (which must be a power of 2).* To perform arbitrary rounding up, use roundup() below.(value_size, 8)
216  ret等于BPF_REG_0
217  map_ptr等于BPF_REG_1
218  index等于BPF_REG_2
220  insn自加等于ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 (BPF_ADD, map_ptr, offsetof(structbpf_array, value))
221  insn自加等于Memory load, dst_reg = *(uint *) (src_reg + off16) (32-bit , ret, index, 0)
222  如果unpriv_array
223  insn自加等于Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 (BPF_JGE, ret, max_entries, 4)
224  insn自加等于BPF_ALU32_IMM(BPF_AND, ret, index_mask)
225  否则
226  insn自加等于Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 (BPF_JGE, ret, max_entries, 3)
229  如果s_power_of_2() - check if a value is a power of two*@n: the value to check* Determine whether some value is a power of two, where zero is* *not* considered a power of two.* Return: true if @n is a power of 2, otherwise false.
230  insn自加等于ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 (BPF_LSH, ret, log2 - log base 2 of 32-bit or a 64-bit unsigned value*@n: parameter* constant-capable log of base 2 calculation* - this can be used to initialise global variables from constant data, hence* the massive ternary operator construction* selects the (elem_size))
231  否则
232  insn自加等于ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 (BPF_MUL, ret, elem_size)
234  insn自加等于ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg (BPF_ADD, ret, map_ptr)
235  insn自加等于Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 (BPF_JA, 0, 0, 1)
236  insn自加等于Short form of mov, dst_reg = imm32 (ret, 0)
237  返回:insninsn_buf