1ff69c21aSJakub Kicinski================
2ff69c21aSJakub Kicinskibpftool-map
3ff69c21aSJakub Kicinski================
4ff69c21aSJakub Kicinski-------------------------------------------------------------------------------
5ff69c21aSJakub Kicinskitool for inspection and simple manipulation of eBPF maps
6ff69c21aSJakub Kicinski-------------------------------------------------------------------------------
7ff69c21aSJakub Kicinski
8ff69c21aSJakub Kicinski:Manual section: 8
9ff69c21aSJakub Kicinski
10ff69c21aSJakub KicinskiSYNOPSIS
11ff69c21aSJakub Kicinski========
12ff69c21aSJakub Kicinski
130641c3c8SQuentin Monnet	**bpftool** [*OPTIONS*] **map** *COMMAND*
140641c3c8SQuentin Monnet
15c541b734SPrashant Bhole	*OPTIONS* := { { **-j** | **--json** } [{ **-p** | **--pretty** }] | { **-f** | **--bpffs** } }
16ff69c21aSJakub Kicinski
17ff69c21aSJakub Kicinski	*COMMANDS* :=
186ebe6dbdSJakub Kicinski	{ **show** | **list** | **dump** | **update** | **lookup** | **getnext** | **delete**
1947ff7ac6SQuentin Monnet	| **pin** | **help** }
20ff69c21aSJakub Kicinski
21ff69c21aSJakub KicinskiMAP COMMANDS
22ff69c21aSJakub Kicinski=============
23ff69c21aSJakub Kicinski
246ebe6dbdSJakub Kicinski|	**bpftool** **map { show | list }**   [*MAP*]
2547ff7ac6SQuentin Monnet|	**bpftool** **map dump**       *MAP*
26c642ea26SJakub Kicinski|	**bpftool** **map update**     *MAP*  **key** *DATA*   **value** *VALUE* [*UPDATE_FLAGS*]
27c642ea26SJakub Kicinski|	**bpftool** **map lookup**     *MAP*  **key** *DATA*
28c642ea26SJakub Kicinski|	**bpftool** **map getnext**    *MAP* [**key** *DATA*]
29c642ea26SJakub Kicinski|	**bpftool** **map delete**     *MAP*  **key** *DATA*
3047ff7ac6SQuentin Monnet|	**bpftool** **map pin**        *MAP*  *FILE*
31f412eed9SJakub Kicinski|	**bpftool** **map event_pipe** *MAP* [**cpu** *N* **index** *M*]
3247ff7ac6SQuentin Monnet|	**bpftool** **map help**
33ff69c21aSJakub Kicinski|
3447ff7ac6SQuentin Monnet|	*MAP* := { **id** *MAP_ID* | **pinned** *FILE* }
35c642ea26SJakub Kicinski|	*DATA* := { [**hex**] *BYTES* }
362148481dSQuentin Monnet|	*PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* }
37c642ea26SJakub Kicinski|	*VALUE* := { *DATA* | *MAP* | *PROG* }
3847ff7ac6SQuentin Monnet|	*UPDATE_FLAGS* := { **any** | **exist** | **noexist** }
39ff69c21aSJakub Kicinski
40ff69c21aSJakub KicinskiDESCRIPTION
41ff69c21aSJakub Kicinski===========
426ebe6dbdSJakub Kicinski	**bpftool map { show | list }**   [*MAP*]
43ff69c21aSJakub Kicinski		  Show information about loaded maps.  If *MAP* is specified
44ff69c21aSJakub Kicinski		  show information only about given map, otherwise list all
45ff69c21aSJakub Kicinski		  maps currently loaded on the system.
46ff69c21aSJakub Kicinski
47ff69c21aSJakub Kicinski		  Output will start with map ID followed by map type and
48ff69c21aSJakub Kicinski		  zero or more named attributes (depending on kernel version).
49ff69c21aSJakub Kicinski
50ff69c21aSJakub Kicinski	**bpftool map dump**    *MAP*
51ff69c21aSJakub Kicinski		  Dump all entries in a given *MAP*.
52ff69c21aSJakub Kicinski
53c642ea26SJakub Kicinski	**bpftool map update**  *MAP*  **key** *DATA*   **value** *VALUE* [*UPDATE_FLAGS*]
54ff69c21aSJakub Kicinski		  Update map entry for a given *KEY*.
55ff69c21aSJakub Kicinski
56ff69c21aSJakub Kicinski		  *UPDATE_FLAGS* can be one of: **any** update existing entry
57ff69c21aSJakub Kicinski		  or add if doesn't exit; **exist** update only if entry already
58ff69c21aSJakub Kicinski		  exists; **noexist** update only if entry doesn't exist.
59ff69c21aSJakub Kicinski
600c90f224SQuentin Monnet		  If the **hex** keyword is provided in front of the bytes
610c90f224SQuentin Monnet		  sequence, the bytes are parsed as hexadeximal values, even if
620c90f224SQuentin Monnet		  no "0x" prefix is added. If the keyword is not provided, then
630c90f224SQuentin Monnet		  the bytes are parsed as decimal values, unless a "0x" prefix
640c90f224SQuentin Monnet		  (for hexadecimal) or a "0" prefix (for octal) is provided.
650c90f224SQuentin Monnet
66c642ea26SJakub Kicinski	**bpftool map lookup**  *MAP*  **key** *DATA*
67ff69c21aSJakub Kicinski		  Lookup **key** in the map.
68ff69c21aSJakub Kicinski
69c642ea26SJakub Kicinski	**bpftool map getnext** *MAP* [**key** *DATA*]
70ff69c21aSJakub Kicinski		  Get next key.  If *key* is not specified, get first key.
71ff69c21aSJakub Kicinski
72c642ea26SJakub Kicinski	**bpftool map delete**  *MAP*  **key** *DATA*
73ff69c21aSJakub Kicinski		  Remove entry from the map.
74ff69c21aSJakub Kicinski
75ff69c21aSJakub Kicinski	**bpftool map pin**     *MAP*  *FILE*
76ff69c21aSJakub Kicinski		  Pin map *MAP* as *FILE*.
77ff69c21aSJakub Kicinski
78ff69c21aSJakub Kicinski		  Note: *FILE* must be located in *bpffs* mount.
79ff69c21aSJakub Kicinski
80f412eed9SJakub Kicinski	**bpftool** **map event_pipe** *MAP* [**cpu** *N* **index** *M*]
81f412eed9SJakub Kicinski		  Read events from a BPF_MAP_TYPE_PERF_EVENT_ARRAY map.
82f412eed9SJakub Kicinski
83f412eed9SJakub Kicinski		  Install perf rings into a perf event array map and dump
84f412eed9SJakub Kicinski		  output of any bpf_perf_event_output() call in the kernel.
85f412eed9SJakub Kicinski		  By default read the number of CPUs on the system and
86f412eed9SJakub Kicinski		  install perf ring for each CPU in the corresponding index
87f412eed9SJakub Kicinski		  in the array.
88f412eed9SJakub Kicinski
89f412eed9SJakub Kicinski		  If **cpu** and **index** are specified, install perf ring
90f412eed9SJakub Kicinski		  for given **cpu** at **index** in the array (single ring).
91f412eed9SJakub Kicinski
92f412eed9SJakub Kicinski		  Note that installing a perf ring into an array will silently
93f412eed9SJakub Kicinski		  replace any existing ring.  Any other application will stop
94f412eed9SJakub Kicinski		  receiving events if it installed its rings earlier.
95f412eed9SJakub Kicinski
96ff69c21aSJakub Kicinski	**bpftool map help**
97ff69c21aSJakub Kicinski		  Print short help message.
98ff69c21aSJakub Kicinski
99a2bc2e5cSQuentin MonnetOPTIONS
100a2bc2e5cSQuentin Monnet=======
101a2bc2e5cSQuentin Monnet	-h, --help
102a2bc2e5cSQuentin Monnet		  Print short generic help message (similar to **bpftool help**).
103a2bc2e5cSQuentin Monnet
104a2bc2e5cSQuentin Monnet	-v, --version
105a2bc2e5cSQuentin Monnet		  Print version number (similar to **bpftool version**).
106a2bc2e5cSQuentin Monnet
1070641c3c8SQuentin Monnet	-j, --json
1080641c3c8SQuentin Monnet		  Generate JSON output. For commands that cannot produce JSON, this
1090641c3c8SQuentin Monnet		  option has no effect.
1100641c3c8SQuentin Monnet
1110641c3c8SQuentin Monnet	-p, --pretty
1120641c3c8SQuentin Monnet		  Generate human-readable JSON output. Implies **-j**.
1130641c3c8SQuentin Monnet
114c541b734SPrashant Bhole	-f, --bpffs
115c541b734SPrashant Bhole		  Show file names of pinned maps.
116c541b734SPrashant Bhole
117ff69c21aSJakub KicinskiEXAMPLES
118ff69c21aSJakub Kicinski========
119ff69c21aSJakub Kicinski**# bpftool map show**
120ff69c21aSJakub Kicinski::
121ff69c21aSJakub Kicinski
122ff69c21aSJakub Kicinski  10: hash  name some_map  flags 0x0
123ff69c21aSJakub Kicinski	key 4B  value 8B  max_entries 2048  memlock 167936B
124ff69c21aSJakub Kicinski
1250c90f224SQuentin MonnetThe following three commands are equivalent:
1260c90f224SQuentin Monnet
1270c90f224SQuentin Monnet|
1280c90f224SQuentin Monnet| **# bpftool map update id 10 key hex   20   c4   b7   00 value hex   0f   ff   ff   ab   01   02   03   4c**
1290c90f224SQuentin Monnet| **# bpftool map update id 10 key     0x20 0xc4 0xb7 0x00 value     0x0f 0xff 0xff 0xab 0x01 0x02 0x03 0x4c**
1300c90f224SQuentin Monnet| **# bpftool map update id 10 key       32  196  183    0 value       15  255  255  171    1    2    3   76**
131ff69c21aSJakub Kicinski
132ff69c21aSJakub Kicinski**# bpftool map lookup id 10 key 0 1 2 3**
133ff69c21aSJakub Kicinski
134ff69c21aSJakub Kicinski::
135ff69c21aSJakub Kicinski
136ff69c21aSJakub Kicinski  key: 00 01 02 03 value: 00 01 02 03 04 05 06 07
137ff69c21aSJakub Kicinski
138ff69c21aSJakub Kicinski
139ff69c21aSJakub Kicinski**# bpftool map dump id 10**
140ff69c21aSJakub Kicinski::
141ff69c21aSJakub Kicinski
142ff69c21aSJakub Kicinski  key: 00 01 02 03  value: 00 01 02 03 04 05 06 07
143ff69c21aSJakub Kicinski  key: 0d 00 07 00  value: 02 00 00 00 01 02 03 04
144ff69c21aSJakub Kicinski  Found 2 elements
145ff69c21aSJakub Kicinski
146ff69c21aSJakub Kicinski**# bpftool map getnext id 10 key 0 1 2 3**
147ff69c21aSJakub Kicinski::
148ff69c21aSJakub Kicinski
149ff69c21aSJakub Kicinski  key:
150ff69c21aSJakub Kicinski  00 01 02 03
151ff69c21aSJakub Kicinski  next key:
152ff69c21aSJakub Kicinski  0d 00 07 00
153ff69c21aSJakub Kicinski
154ff69c21aSJakub Kicinski|
155ff69c21aSJakub Kicinski| **# mount -t bpf none /sys/fs/bpf/**
156ff69c21aSJakub Kicinski| **# bpftool map pin id 10 /sys/fs/bpf/map**
157ff69c21aSJakub Kicinski| **# bpftool map del pinned /sys/fs/bpf/map key 13 00 07 00**
158ff69c21aSJakub Kicinski
159ff69c21aSJakub KicinskiSEE ALSO
160ff69c21aSJakub Kicinski========
1615ccda64dSRoman Gushchin	**bpftool**\ (8), **bpftool-prog**\ (8), **bpftool-cgroup**\ (8)
162