1BPFTOOL-MAP(8) BPFTOOL-MAP(8)
2
3
4
6 bpftool-map - tool for inspection and simple manipulation of eBPF maps
7
9 bpftool [OPTIONS] map COMMAND
10
11 OPTIONS := { { -j | --json } [{ -p | --pretty }] | { -f | --bpffs }
12 }
13
14 COMMANDS := { show | list | create | dump | update | lookup | get‐
15 next | delete | pin | help }
16
18 bpftool map { show | list } [MAP]
19 bpftool map create FILE type TYPE key KEY_SIZE value VALUE_SIZE
20 entries MAX_ENTRIES name NAME [flags FLAGS] [dev NAME]
21 bpftool map dump MAP
22 bpftool map update MAP [key DATA] [value VALUE] [UPDATE_FLAGS]
23 bpftool map lookup MAP [key DATA]
24 bpftool map getnext MAP [key DATA]
25 bpftool map delete MAP key DATA
26 bpftool map pin MAP FILE
27 bpftool map event_pipe MAP [cpu N index M]
28 bpftool map peek MAP
29 bpftool map push MAP value VALUE
30 bpftool map pop MAP
31 bpftool map enqueue MAP value VALUE
32 bpftool map dequeue MAP
33 bpftool map help
34
35 MAP := { id MAP_ID | pinned FILE }
36 DATA := { [hex] BYTES }
37 PROG := { id PROG_ID | pinned FILE | tag PROG_TAG }
38 VALUE := { DATA | MAP | PROG }
39 UPDATE_FLAGS := { any | exist | noexist }
40 TYPE := { hash | array | prog_array | perf_event_array | percpu_hash
41 | percpu_array | stack_trace | cgroup_array | lru_hash
42 | lru_percpu_hash | lpm_trie | array_of_maps | hash_of_maps
43 | devmap | sockmap | cpumap | xskmap | sockhash
44 | cgroup_storage | reuseport_sockarray | percpu_cgroup_storage
45 | queue | stack }
46
47
49 bpftool map { show | list } [MAP]
50 Show information about loaded maps. If MAP is specified show
51 information only about given map, otherwise list all maps
52 currently loaded on the system.
53
54 Output will start with map ID followed by map type and zero
55 or more named attributes (depending on kernel version).
56
57 bpftool map create FILE type TYPE key KEY_SIZE value VALUE_SIZE
58 entries MAX_ENTRIES name NAME [flags FLAGS] [dev NAME]
59 Create a new map with given parameters and pin it to bpffs as
60 FILE.
61
62 bpftool map dump MAP
63 Dump all entries in a given MAP.
64
65 bpftool map update MAP [key DATA] [value VALUE] [UPDATE_FLAGS]
66 Update map entry for a given KEY.
67
68 UPDATE_FLAGS can be one of: any update existing entry or add
69 if doesn't exit; exist update only if entry already exists;
70 noexist update only if entry doesn't exist.
71
72 If the hex keyword is provided in front of the bytes
73 sequence, the bytes are parsed as hexadeximal values, even if
74 no "0x" prefix is added. If the keyword is not provided, then
75 the bytes are parsed as decimal values, unless a "0x" prefix
76 (for hexadecimal) or a "0" prefix (for octal) is provided.
77
78 bpftool map lookup MAP [key DATA]
79 Lookup key in the map.
80
81 bpftool map getnext MAP [key DATA]
82 Get next key. If key is not specified, get first key.
83
84 bpftool map delete MAP key DATA
85 Remove entry from the map.
86
87 bpftool map pin MAP FILE
88 Pin map MAP as FILE.
89
90 Note: FILE must be located in bpffs mount. It must not con‐
91 tain a dot character ('.'), which is reserved for future
92 extensions of bpffs.
93
94 bpftool map event_pipe MAP [cpu N index M]
95 Read events from a BPF_MAP_TYPE_PERF_EVENT_ARRAY map.
96
97 Install perf rings into a perf event array map and dump out‐
98 put of any bpf_perf_event_output() call in the kernel. By
99 default read the number of CPUs on the system and install
100 perf ring for each CPU in the corresponding index in the
101 array.
102
103 If cpu and index are specified, install perf ring for given
104 cpu at index in the array (single ring).
105
106 Note that installing a perf ring into an array will silently
107 replace any existing ring. Any other application will stop
108 receiving events if it installed its rings earlier.
109
110 bpftool map peek MAP
111 Peek next value in the queue or stack.
112
113 bpftool map push MAP value VALUE
114 Push value onto the stack.
115
116 bpftool map pop MAP
117 Pop and print value from the stack.
118
119 bpftool map enqueue MAP value VALUE
120 Enqueue value into the queue.
121
122 bpftool map dequeue MAP
123 Dequeue and print value from the queue.
124
125 bpftool map help
126 Print short help message.
127
129 -h, --help
130 Print short generic help message (similar to bpftool help).
131
132 -v, --version
133 Print version number (similar to bpftool version).
134
135 -j, --json
136 Generate JSON output. For commands that cannot produce JSON,
137 this option has no effect.
138
139 -p, --pretty
140 Generate human-readable JSON output. Implies -j.
141
142 -f, --bpffs
143 Show file names of pinned maps.
144
145 -n, --nomount
146 Do not automatically attempt to mount any virtual file system
147 (such as tracefs or BPF virtual file system) when necessary.
148
150 # bpftool map show
151
152 10: hash name some_map flags 0x0
153 key 4B value 8B max_entries 2048 memlock 167936B
154
155 The following three commands are equivalent:
156
157 # bpftool map update id 10 key hex 20 c4 b7 00 value hex 0f ff ff ab 01 02 03 4c
158 # bpftool map update id 10 key 0x20 0xc4 0xb7 0x00 value 0x0f 0xff 0xff 0xab 0x01 0x02 0x03 0x4c
159 # bpftool map update id 10 key 32 196 183 0 value 15 255 255 171 1 2 3 76
160
161
162 # bpftool map lookup id 10 key 0 1 2 3
163
164 key: 00 01 02 03 value: 00 01 02 03 04 05 06 07
165
166 # bpftool map dump id 10
167
168 key: 00 01 02 03 value: 00 01 02 03 04 05 06 07
169 key: 0d 00 07 00 value: 02 00 00 00 01 02 03 04
170 Found 2 elements
171
172 # bpftool map getnext id 10 key 0 1 2 3
173
174 key:
175 00 01 02 03
176 next key:
177 0d 00 07 00
178
179 # mount -t bpf none /sys/fs/bpf/
180 # bpftool map pin id 10 /sys/fs/bpf/map
181 # bpftool map del pinned /sys/fs/bpf/map key 13 00 07 00
182
183
184 Note that map update can also be used in order to change the program
185 references hold by a program array map. This can be used, for example,
186 to change the programs used for tail-call jumps at runtime, without
187 having to reload the entry-point program. Below is an example for this
188 use case: we load a program defining a prog array map, and with a main
189 function that contains a tail call to other programs that can be used
190 either to "process" packets or to "debug" processing. Note that the
191 prog array map MUST be pinned into the BPF virtual file system for the
192 map update to work successfully, as kernel flushes prog array maps when
193 they have no more references from user space (and the update would be
194 lost as soon as bpftool exits).
195
196 # bpftool prog loadall tail_calls.o /sys/fs/bpf/foo type xdp
197 # bpftool prog --bpffs
198
199
200 545: xdp name main_func tag 674b4b5597193dc3 gpl
201 loaded_at 2018-12-12T15:02:58+0000 uid 0
202 xlated 240B jited 257B memlock 4096B map_ids 294
203 pinned /sys/fs/bpf/foo/xdp
204 546: xdp name bpf_func_process tag e369a529024751fc gpl
205 loaded_at 2018-12-12T15:02:58+0000 uid 0
206 xlated 200B jited 164B memlock 4096B
207 pinned /sys/fs/bpf/foo/process
208 547: xdp name bpf_func_debug tag 0b597868bc7f0976 gpl
209 loaded_at 2018-12-12T15:02:58+0000 uid 0
210 xlated 200B jited 164B memlock 4096B
211 pinned /sys/fs/bpf/foo/debug
212
213 # bpftool map
214
215 294: prog_array name jmp_table flags 0x0
216 key 4B value 4B max_entries 1 memlock 4096B
217 owner_prog_type xdp owner jited
218
219 # bpftool map pin id 294 /sys/fs/bpf/bar
220 # bpftool map dump pinned /sys/fs/bpf/bar
221
222
223 Found 0 elements
224
225 # bpftool map update pinned /sys/fs/bpf/bar key 0 0 0 0 value pinned /sys/fs/bpf/foo/debug
226 # bpftool map dump pinned /sys/fs/bpf/bar
227
228
229 key: 00 00 00 00 value: 22 02 00 00
230 Found 1 element
231
233 bpf(2), bpf-helpers(7), bpftool(8), bpftool-prog(8),
234 bpftool-cgroup(8), bpftool-feature(8), bpftool-net(8),
235 bpftool-perf(8)
236
237
238
239
240 BPFTOOL-MAP(8)