bpf__config_obj() is introduced as a core API to config BPF object
after loading. One configuration option of maps is introduced. After
this patch BPF object can accept configuration like:
maps.my_map.value=1234
This patch is more complex than the work it really does because the
consideration of extension. In designing of BPF map configuration,
following things should be considered:
1. Array indics selection: perf should allow user setting different
value to different slots in an array, with syntax like:
maps.my_map.value[0,3-6]=1234;
2. Type of value: integer is not the only valid value type. Perf
event can also be put into a map after commit 35578d7984003097af2b1e3
(bpf: Implement function bpf_perf_event_read() that get the selected
hardware PMU conuter);
3. For hash table, it is possible to use string or other as key;
4. It is possible that map configuration is unable to be setup
during parsing. Perf event is an example.
Therefore, this patch does tie following thing for extension:
1. Instead of update map element during parsing, this patch stores
map config options in 'struct bpf_map_priv'. Following patches
would apply those configs at proper time;
2. Make 'struct bpf_map_priv' extensible so following patches can
add new key and value operations;
3. Use bpf_config_map_funcs array to support more maps configuration.
Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx>
Signed-off-by: He Kuang <hekuang@xxxxxxxxxx>
Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Cc: Alexei Starovoitov <ast@xxxxxxxxxxxx>
Cc: Brendan Gregg <brendan.d.gregg@xxxxxxxxx>
Cc: Daniel Borkmann <daniel@xxxxxxxxxxxxx>
Cc: David Ahern <dsahern@xxxxxxxxx>
Cc: He Kuang <hekuang@xxxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Cc: Kaixu Xia <xiakaixu@xxxxxxxxxx>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@xxxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Cc: Paul Mackerras <paulus@xxxxxxxxx>
Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Zefan Li <lizefan@xxxxxxxxxx>
Cc: pi3orama@xxxxxxx
Link: http://lkml.kernel.org/n/ebpf-36xcrahy9n0ayc05mu7aajpk@xxxxxxxxxxxxxx
---
+enum bpf_map_priv_key_type {
+ BPF_MAP_PRIV_KEY_ALL,
+};
+
+enum bpf_map_priv_value_type {
+ BPF_MAP_PRIV_VAL_VALUE,
+};
+
+struct bpf_map_priv {
+ struct {
+ enum bpf_map_priv_key_type type;
+ } key;
+
+ struct {
+ enum bpf_map_priv_value_type type;
+ union {
+ u64 val;
+ };
+ } value;
+};
+