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* :=
180b592b5aSJakub Kicinski	{ **show** | **list** | **create** | **dump** | **update** | **lookup** | **getnext**
190b592b5aSJakub Kicinski	| **delete** | **pin** | **help** }
20ff69c21aSJakub Kicinski
21ff69c21aSJakub KicinskiMAP COMMANDS
22ff69c21aSJakub Kicinski=============
23ff69c21aSJakub Kicinski
246ebe6dbdSJakub Kicinski|	**bpftool** **map { show | list }**   [*MAP*]
250b592b5aSJakub Kicinski|	**bpftool** **map create**     *FILE* **type** *TYPE* **key** *KEY_SIZE* **value** *VALUE_SIZE* \
260b592b5aSJakub Kicinski|		**entries** *MAX_ENTRIES* **name** *NAME* [**flags** *FLAGS*] [**dev** *NAME*]
2747ff7ac6SQuentin Monnet|	**bpftool** **map dump**       *MAP*
28c642ea26SJakub Kicinski|	**bpftool** **map update**     *MAP*  **key** *DATA*   **value** *VALUE* [*UPDATE_FLAGS*]
29c642ea26SJakub Kicinski|	**bpftool** **map lookup**     *MAP*  **key** *DATA*
30c642ea26SJakub Kicinski|	**bpftool** **map getnext**    *MAP* [**key** *DATA*]
31c642ea26SJakub Kicinski|	**bpftool** **map delete**     *MAP*  **key** *DATA*
3247ff7ac6SQuentin Monnet|	**bpftool** **map pin**        *MAP*  *FILE*
33f412eed9SJakub Kicinski|	**bpftool** **map event_pipe** *MAP* [**cpu** *N* **index** *M*]
3447ff7ac6SQuentin Monnet|	**bpftool** **map help**
35ff69c21aSJakub Kicinski|
3647ff7ac6SQuentin Monnet|	*MAP* := { **id** *MAP_ID* | **pinned** *FILE* }
37c642ea26SJakub Kicinski|	*DATA* := { [**hex**] *BYTES* }
382148481dSQuentin Monnet|	*PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* }
39c642ea26SJakub Kicinski|	*VALUE* := { *DATA* | *MAP* | *PROG* }
4047ff7ac6SQuentin Monnet|	*UPDATE_FLAGS* := { **any** | **exist** | **noexist** }
410b592b5aSJakub Kicinski|	*TYPE* := { **hash** | **array** | **prog_array** | **perf_event_array** | **percpu_hash**
420b592b5aSJakub Kicinski|		| **percpu_array** | **stack_trace** | **cgroup_array** | **lru_hash**
430b592b5aSJakub Kicinski|		| **lru_percpu_hash** | **lpm_trie** | **array_of_maps** | **hash_of_maps**
440b592b5aSJakub Kicinski|		| **devmap** | **sockmap** | **cpumap** | **xskmap** | **sockhash**
450b592b5aSJakub Kicinski|		| **cgroup_storage** | **reuseport_sockarray** | **percpu_cgroup_storage** }
46ff69c21aSJakub Kicinski
47ff69c21aSJakub KicinskiDESCRIPTION
48ff69c21aSJakub Kicinski===========
496ebe6dbdSJakub Kicinski	**bpftool map { show | list }**   [*MAP*]
50ff69c21aSJakub Kicinski		  Show information about loaded maps.  If *MAP* is specified
51ff69c21aSJakub Kicinski		  show information only about given map, otherwise list all
52ff69c21aSJakub Kicinski		  maps currently loaded on the system.
53ff69c21aSJakub Kicinski
54ff69c21aSJakub Kicinski		  Output will start with map ID followed by map type and
55ff69c21aSJakub Kicinski		  zero or more named attributes (depending on kernel version).
56ff69c21aSJakub Kicinski
570b592b5aSJakub Kicinski	**bpftool map create** *FILE* **type** *TYPE* **key** *KEY_SIZE* **value** *VALUE_SIZE*  **entries** *MAX_ENTRIES* **name** *NAME* [**flags** *FLAGS*] [**dev** *NAME*]
580b592b5aSJakub Kicinski		  Create a new map with given parameters and pin it to *bpffs*
590b592b5aSJakub Kicinski		  as *FILE*.
600b592b5aSJakub Kicinski
61ff69c21aSJakub Kicinski	**bpftool map dump**    *MAP*
62ff69c21aSJakub Kicinski		  Dump all entries in a given *MAP*.
63ff69c21aSJakub Kicinski
64c642ea26SJakub Kicinski	**bpftool map update**  *MAP*  **key** *DATA*   **value** *VALUE* [*UPDATE_FLAGS*]
65ff69c21aSJakub Kicinski		  Update map entry for a given *KEY*.
66ff69c21aSJakub Kicinski
67ff69c21aSJakub Kicinski		  *UPDATE_FLAGS* can be one of: **any** update existing entry
68ff69c21aSJakub Kicinski		  or add if doesn't exit; **exist** update only if entry already
69ff69c21aSJakub Kicinski		  exists; **noexist** update only if entry doesn't exist.
70ff69c21aSJakub Kicinski
710c90f224SQuentin Monnet		  If the **hex** keyword is provided in front of the bytes
720c90f224SQuentin Monnet		  sequence, the bytes are parsed as hexadeximal values, even if
730c90f224SQuentin Monnet		  no "0x" prefix is added. If the keyword is not provided, then
740c90f224SQuentin Monnet		  the bytes are parsed as decimal values, unless a "0x" prefix
750c90f224SQuentin Monnet		  (for hexadecimal) or a "0" prefix (for octal) is provided.
760c90f224SQuentin Monnet
77c642ea26SJakub Kicinski	**bpftool map lookup**  *MAP*  **key** *DATA*
78ff69c21aSJakub Kicinski		  Lookup **key** in the map.
79ff69c21aSJakub Kicinski
80c642ea26SJakub Kicinski	**bpftool map getnext** *MAP* [**key** *DATA*]
81ff69c21aSJakub Kicinski		  Get next key.  If *key* is not specified, get first key.
82ff69c21aSJakub Kicinski
83c642ea26SJakub Kicinski	**bpftool map delete**  *MAP*  **key** *DATA*
84ff69c21aSJakub Kicinski		  Remove entry from the map.
85ff69c21aSJakub Kicinski
86ff69c21aSJakub Kicinski	**bpftool map pin**     *MAP*  *FILE*
87ff69c21aSJakub Kicinski		  Pin map *MAP* as *FILE*.
88ff69c21aSJakub Kicinski
89882731e0SQuentin Monnet		  Note: *FILE* must be located in *bpffs* mount. It must not
90882731e0SQuentin Monnet		  contain a dot character ('.'), which is reserved for future
91882731e0SQuentin Monnet		  extensions of *bpffs*.
92ff69c21aSJakub Kicinski
93f412eed9SJakub Kicinski	**bpftool** **map event_pipe** *MAP* [**cpu** *N* **index** *M*]
94f412eed9SJakub Kicinski		  Read events from a BPF_MAP_TYPE_PERF_EVENT_ARRAY map.
95f412eed9SJakub Kicinski
96f412eed9SJakub Kicinski		  Install perf rings into a perf event array map and dump
97f412eed9SJakub Kicinski		  output of any bpf_perf_event_output() call in the kernel.
98f412eed9SJakub Kicinski		  By default read the number of CPUs on the system and
99f412eed9SJakub Kicinski		  install perf ring for each CPU in the corresponding index
100f412eed9SJakub Kicinski		  in the array.
101f412eed9SJakub Kicinski
102f412eed9SJakub Kicinski		  If **cpu** and **index** are specified, install perf ring
103f412eed9SJakub Kicinski		  for given **cpu** at **index** in the array (single ring).
104f412eed9SJakub Kicinski
105f412eed9SJakub Kicinski		  Note that installing a perf ring into an array will silently
106f412eed9SJakub Kicinski		  replace any existing ring.  Any other application will stop
107f412eed9SJakub Kicinski		  receiving events if it installed its rings earlier.
108f412eed9SJakub Kicinski
109ff69c21aSJakub Kicinski	**bpftool map help**
110ff69c21aSJakub Kicinski		  Print short help message.
111ff69c21aSJakub Kicinski
112a2bc2e5cSQuentin MonnetOPTIONS
113a2bc2e5cSQuentin Monnet=======
114a2bc2e5cSQuentin Monnet	-h, --help
115a2bc2e5cSQuentin Monnet		  Print short generic help message (similar to **bpftool help**).
116a2bc2e5cSQuentin Monnet
117a2bc2e5cSQuentin Monnet	-v, --version
118a2bc2e5cSQuentin Monnet		  Print version number (similar to **bpftool version**).
119a2bc2e5cSQuentin Monnet
1200641c3c8SQuentin Monnet	-j, --json
1210641c3c8SQuentin Monnet		  Generate JSON output. For commands that cannot produce JSON, this
1220641c3c8SQuentin Monnet		  option has no effect.
1230641c3c8SQuentin Monnet
1240641c3c8SQuentin Monnet	-p, --pretty
1250641c3c8SQuentin Monnet		  Generate human-readable JSON output. Implies **-j**.
1260641c3c8SQuentin Monnet
127c541b734SPrashant Bhole	-f, --bpffs
128c541b734SPrashant Bhole		  Show file names of pinned maps.
129c541b734SPrashant Bhole
130ff69c21aSJakub KicinskiEXAMPLES
131ff69c21aSJakub Kicinski========
132ff69c21aSJakub Kicinski**# bpftool map show**
133ff69c21aSJakub Kicinski::
134ff69c21aSJakub Kicinski
135ff69c21aSJakub Kicinski  10: hash  name some_map  flags 0x0
136ff69c21aSJakub Kicinski	key 4B  value 8B  max_entries 2048  memlock 167936B
137ff69c21aSJakub Kicinski
1380c90f224SQuentin MonnetThe following three commands are equivalent:
1390c90f224SQuentin Monnet
1400c90f224SQuentin Monnet|
1410c90f224SQuentin Monnet| **# bpftool map update id 10 key hex   20   c4   b7   00 value hex   0f   ff   ff   ab   01   02   03   4c**
1420c90f224SQuentin Monnet| **# bpftool map update id 10 key     0x20 0xc4 0xb7 0x00 value     0x0f 0xff 0xff 0xab 0x01 0x02 0x03 0x4c**
1430c90f224SQuentin Monnet| **# bpftool map update id 10 key       32  196  183    0 value       15  255  255  171    1    2    3   76**
144ff69c21aSJakub Kicinski
145ff69c21aSJakub Kicinski**# bpftool map lookup id 10 key 0 1 2 3**
146ff69c21aSJakub Kicinski
147ff69c21aSJakub Kicinski::
148ff69c21aSJakub Kicinski
149ff69c21aSJakub Kicinski  key: 00 01 02 03 value: 00 01 02 03 04 05 06 07
150ff69c21aSJakub Kicinski
151ff69c21aSJakub Kicinski
152ff69c21aSJakub Kicinski**# bpftool map dump id 10**
153ff69c21aSJakub Kicinski::
154ff69c21aSJakub Kicinski
155ff69c21aSJakub Kicinski  key: 00 01 02 03  value: 00 01 02 03 04 05 06 07
156ff69c21aSJakub Kicinski  key: 0d 00 07 00  value: 02 00 00 00 01 02 03 04
157ff69c21aSJakub Kicinski  Found 2 elements
158ff69c21aSJakub Kicinski
159ff69c21aSJakub Kicinski**# bpftool map getnext id 10 key 0 1 2 3**
160ff69c21aSJakub Kicinski::
161ff69c21aSJakub Kicinski
162ff69c21aSJakub Kicinski  key:
163ff69c21aSJakub Kicinski  00 01 02 03
164ff69c21aSJakub Kicinski  next key:
165ff69c21aSJakub Kicinski  0d 00 07 00
166ff69c21aSJakub Kicinski
167ff69c21aSJakub Kicinski|
168ff69c21aSJakub Kicinski| **# mount -t bpf none /sys/fs/bpf/**
169ff69c21aSJakub Kicinski| **# bpftool map pin id 10 /sys/fs/bpf/map**
170ff69c21aSJakub Kicinski| **# bpftool map del pinned /sys/fs/bpf/map key 13 00 07 00**
171ff69c21aSJakub Kicinski
172ff69c21aSJakub KicinskiSEE ALSO
173ff69c21aSJakub Kicinski========
174f98e46a2SQuentin Monnet	**bpf**\ (2),
175f98e46a2SQuentin Monnet	**bpf-helpers**\ (7),
176f98e46a2SQuentin Monnet	**bpftool**\ (8),
177f98e46a2SQuentin Monnet	**bpftool-prog**\ (8),
178f98e46a2SQuentin Monnet	**bpftool-cgroup**\ (8),
179f98e46a2SQuentin Monnet	**bpftool-net**\ (8),
180f98e46a2SQuentin Monnet	**bpftool-perf**\ (8)
181